JavaScriptで配列の2つの文字列を比較し、すべての文字が含まれるか判定する方法
今回は、配列の第1要素に含まれる文字列が、第2要素の文字列のすべての文字を含んでいる場合に true を返す関数を作成してみましょう。
例えば、次のようなケースが考えられます。
["hello", "Hello"] → true
大文字・小文字を無視すれば、2つ目の文字列のすべての文字が1つ目に含まれているため
一方、引数が ["hello", "hey"] の場合は false を返します。「hello」には「y」という文字が含まれていないからです。
また、["Alien", "line"] の場合は、「line」のすべての文字が「Alien」に含まれているため true となります。
解決のアプローチ
この問題は比較的シンプルです。配列の第2要素を1文字ずつ分割し、各文字が第1要素に含まれているかどうかを順番に確認します。すべての文字が含まれていれば true、1つでも欠けていれば false を返す仕組みです。
具体的な手順は以下の通りです。
- 第2要素の文字列を
toLowerCase()で小文字に統一する split("")で1文字ずつの配列に分解するevery()メソッドで、すべての文字が第1要素に存在するかを検証する
大文字・小文字の違いは無視したいので、比較前に両方の文字列を小文字に変換しておくのがポイントです。
コード例
const arrayContains = ([first, second]) => {
return second
.toLowerCase()
.split("")
.every(char => {
return first.toLowerCase().includes(char);
});
};
console.log(arrayContains(['hello', 'HELLO']));
console.log(arrayContains(['hello', 'hey']));
console.log(arrayContains(['Alien', 'line']));ここでは配列の分割代入を使って、第1引数を first、第2引数を second として受け取っています。every() は配列の全要素が条件を満たすときだけ true を返すメソッドなので、この用途にぴったりです。
実行結果
コンソールには次のように出力されます。
true
false
true
別のアプローチ:Set を活用した高速化
より長い文字列を扱う場合は、Set を使うと効率が向上します。includes() を繰り返し呼び出す代わりに、Set の has() メソッドなら定数時間で文字の存在を確認できるからです。
const arrayContains = ([first, second]) => {
const chars = new Set(first.toLowerCase());
return [...second.toLowerCase()].every(char => chars.has(char));
};まず第1要素の文字集合を Set として生成し、スプレッド構文で展開した第2要素の各文字がすべてその集合に含まれるかを every() で判定しています。文字列が長くなるほど、この方法の優位性が顕著になります。
-
JavaScriptで2つの配列から作れる最大の数を求める方法
問題1桁の数字を要素とする2つの配列 arr1 と arr2 を第1・第2引数として受け取り、さらに数値 num(num <= arr1.length + arr2.length)を第3引数として受け取るJavaScript関数を作成します。この関数が返すのは、長さ num の1桁の数字からなる新しい配列です。この配列自体が1つの数値を表しており、その値は両方の配列の要素を組み合わせて作成できる最大の数でなければなりません。ただし、重要な条件がひとつあります。それは、同じ配列内の要素の相対的な順序は維持しなければならないという点です。例えば、関数への入力が次の場合を考えてみましょう。co
-
JavaScriptで配列内の特定の数値に最も近い2つの要素を検索する方法
問題の概要JavaScriptで、ソート済みの整数配列 arr を第一引数に、目標となる数値 target を第二引数に受け取る関数を作成します。この関数は、配列内に存在する要素の中から target に最も近い2つの数値を選び、それらを昇順に並べた配列として返す必要があります。例えば、以下のような入力が与えられた場合を考えてみましょう。入力:const arr = [1, 2, 3, 4, 5];const target = 3;出力:const output = [2, 3];この場合、target の値が 3 であるため、最も近い2つの要素は 2 と 3 となり、昇順に並べて [2, 3