【JavaScript】値が(1始まりの)インデックスと一致する要素をすべて抽出する方法
本記事では、数値の配列を第一引数(かつ唯一の引数)として受け取るJavaScript関数の作成方法を解説します。
この関数は、元の配列をもとに新しい配列を構築して返します。新しい配列には、元の配列の中から「値が自分自身のインデックスと一致している」要素だけが含まれます。
ここでの重要なポイントは、インデックスの判定に従来の0始まり(0-based)ではなく、1始まり(1-based)のインデックスを使用することです。
要件の整理
入力配列が次の場合:
const arr = [45, 5, 2, 4, 6, 6, 6];
期待される出力は次のとおりです:
const output = [4, 6];
これは、4が4番目(1始まりカウント)の位置にあり、最初の6が6番目の位置にあるためです。それ以外の要素は、値と位置が一致していません。
実装コード
const arr = [45, 5, 2, 4, 6, 6, 6];
const pickSameElements = (arr = []) => {
const res = [];
const { length } = arr;
for(let ind = 0; ind < length; ind++){
const el = arr[ind];
if(el - ind === 1){
res.push(el);
};
};
return res;
};
console.log(pickSameElements(arr));コードの解説
このコードの動作は以下のとおりです。
forループで配列を先頭から順番に走査します。- 各要素
elに対してel - ind === 1という条件で判定します。indは0始まりのループ変数なので、この条件は「el === ind + 1」、つまり値が1始まりのインデックスと一致していることを意味します。 - 条件を満たした要素だけを結果配列
resに追加し、最後に返却します。
filterを使った別解
より簡潔に書きたい場合は、Array.prototype.filter() を使う方法もあります。
const pickSameElements = (arr = []) => arr.filter((el, ind) => el === ind + 1);
こちらも同じ結果になります。条件式が一目で意図を表すため、可読性の面でおすすめです。
出力
コンソールに出力される結果は次のとおりです。
[4, 6]
-
JavaScriptで3つの配列に共通する要素の合計を求める方法
問題今回は、3つの数値型配列を引数として受け取るJavaScript関数を作成します。この関数は、3つの配列すべてに共通して存在する要素だけを抜き出し、それらの合計値を返す必要があります。たとえば、次のような配列が与えられた場合を考えてみましょう。const arr1 = [4, 4, 5, 8, 3]; const arr2 = [7, 3, 7, 4, 1]; const arr3 = [11, 0, 7, 3, 4];この場合、3つの配列すべてに存在するのは「4」と「3」なので、期待される出力は 4 + 3 = 7 となります。解決策のコード例以下がその実装コードです。 { le
-
JavaScriptで複数の配列から要素を交互に取り出して1つの配列にまとめる方法
問題 今回は、任意の個数の配列を引数として受け取り、それらすべての配列から要素を交互に(順番に一つずつ)取り出して、新しい配列を組み立てるJavaScript関数を作成します。 例えば、関数への入力が次のような場合を考えてみましょう。 入力 const arr1 = [1, 2, 3, 4]; const arr2 = [11, 12, 13, 14]; const arr3 = [a, b, c]; 出力 const output = [1, 11, a, 2, 12, b, 3, 13, c, 4, 14]; ご覧のとおり、まず各配列の先頭要素(1、11、a)、次に各配列の2番目の要素(