JavaScript
 Computer >> コンピューター >  >> プログラミング >> JavaScript

【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]
  1. 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

  2. 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番目の要素(