JavaScriptで配列内のn番目に出現する要素のインデックスを取得する方法
今回は、配列 arr、文字列または数値リテラル txt、そして数値 n を引数として受け取る関数 getIndex() を作成します。この関数は、arr の中で txt が n 回目に出現する位置(インデックス)を返す必要があります。もし txt が n 回出現しない場合は、-1 を返します。
では、実際に関数を実装してみましょう。
サンプルコード
const arr = [45, 76, 54, 43, '|', 54, '|', 1, 66, '-', '|', 34, '|', 5,
76];
const getIndex = (arr, txt, n) => {
const position = arr.reduce((acc, val, ind) => {
if(val === txt){
if(acc.count+1 === n){
acc['index'] = ind;
};
acc['count']++;
}
return acc;
}, {
index: -1,
count: 0
});
return position.index;
};
console.log(getIndex(arr, '|', 3));
console.log(getIndex(arr, 54, 2));
console.log(getIndex(arr, '-', 3));
実行結果
コンソールには以下のように出力されます。
10 5 -1
コードの解説
この関数では reduce() メソッドを活用しています。初期値として { index: -1, count: 0 } というオブジェクトを用意し、配列を先頭から順に走査しながら、txt と一致する要素をカウントしていきます。カウント数が n に達したタイミングで、その要素のインデックスを index プロパティに記録します。
最終的に position.index を返すことで、n 回目の出現位置を取得できます。条件を満たす出現が存在しなかった場合も、初期値の -1 がそのまま返されるため、特別な分岐処理を追加する必要がなく、シンプルで安全な実装になっています。
上記の例では、「'|'」の3回目の出現はインデックス10、「54」の2回目の出現はインデックス5にあり、一方「'-'」は2回しか出現しないため3回目は -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 です。この要素の左側にある