JavaScriptで配列の中に含まれる配列のインデックス位置を見つける方法
たとえば、次のような「配列の配列」(ネストされた配列)があるとします。
const arr = [ [1,0], [0,1], [0,0] ];
ここで求められているのは、このような配列を第1引数として受け取り、ちょうど2つの数値からなる配列を第2引数として受け取るJavaScript関数を作成することです。
作成する関数は、第2引数として渡された配列が元の配列の配列の中に存在するかどうかを判定し、存在すればそのインデックス位置を返す必要があります。
アプローチのポイント
JavaScriptでは、配列同士を == や === で直接比較しても、参照先が異なるため一致とはみなされません。そこで、Array.prototype.every() メソッドを使って各要素を1つずつ比較するのが有効です。まず要素数が一致していることを確認し、そのうえですべての要素が等しければ「同じ配列」と判断します。
例
const arr = [ [1,0], [0,1], [0,0] ];
const sub = [0, 0];
// 指定したインデックスの配列とsubの全要素が一致するか確認するヘルパー関数
const matchEvery = (arr, ind, sub) => arr[ind].every((el, i) => el == sub[i]);
const searchForArray = (arr = [], sub = []) => {
let ind = -1;
let {
length: len } = arr;
// 配列を後ろから順に走査して一致するものを探す
while (len--) {
if (arr[len].length === sub.length && matchEvery(arr, len, sub)){
ind = len;
break;
};
};
return ind;
};
console.log(searchForArray(arr, sub));出力
コンソールには以下のように出力されます。
2
この結果から、[0, 0] という配列は元の配列 arr のインデックス 2 の位置に存在することが確認できます。なお、一致する配列が見つからなかった場合は、関数は -1 を返す仕様になっています。
-
JavaScriptで左右の合計が等しくなる「バランスインデックス」を配列から見つける方法
問題 整数の配列 arr を唯一の引数として受け取る JavaScript 関数を作成する必要があります。 この関数は、指定したインデックスの左側にある要素の合計と右側にある要素の合計が等しくなるようなインデックスを1つ見つけて返します。該当するインデックスが配列内に存在しない場合は、-1 を返します。 たとえば、関数への入力が次の場合を考えてみましょう。 入力 const arr = [1, 2, 3, 4, 3, 2, 1]; 出力 const output = 3; 出力の説明 インデックス 3 の左側(1 + 2 + 3 = 6)と右側(3 + 2 + 1 = 6)の要素の合計が、どち
-
【JavaScript】配列の中で左右の合計が等しくなる中央インデックス(ピボットインデックス)を見つける方法
問題数値の配列 arr が与えられたとき、「あるインデックスより左側にあるすべての要素の合計」と「そのインデックスより右側にあるすべての要素の合計」が等しくなる位置(中央インデックス/ピボットインデックス)を求める JavaScript 関数を作成します。該当するインデックスが複数存在する場合は、最初に見つかったものを返し、存在しない場合は -1 を返すのが一般的です。たとえば、次のような入力を考えます。入力const arr = [1, 7, 3, 6, 5, 6];出力const output = 3;出力の解説インデックス 3 の要素は nums[3] = 6 です。この要素の左側にある