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

【JavaScript】配列内の隣接する要素間の距離(差)を求める方法

本記事では、数値の配列を受け取り、元の配列の隣接する2つの要素の差(絶対値)を要素として持つ新しい配列を返す関数 arrayDistance() の作成方法を解説します。

要件の確認

例えば、次のような入力配列が与えられたとします。

const arr = [1000,2000,5000,4000,300,0,1250];

この場合、期待される出力は各隣接要素間の差になります。

[(1000-2000),(2000-5000),(5000-4000),(4000-300),(300-0),(0-1250)]

なお、ここでは差の絶対値を取るため、結果はすべて正の数になります。それでは、実際にコードを書いてみましょう。

コード例

const arr = [1000,2000,5000,4000,300,0,1250];
const arrayDistance = arr => {
    return arr.reduce((acc, val, ind) => {
        if(arr[ind+1] !== undefined){
            return acc.concat(Math.abs(val-arr[ind+1]));
        }else{
            return acc;
        }
    }, []);
};
console.log(arrayDistance(arr));

コードの解説

この関数では、Array.prototype.reduce() メソッドを使用しています。reduceメソッドは配列の各要素に対してコールバック関数を実行し、単一の累積値(ここでは新しい配列)を構築します。

  • acc: 累積配列(初期値は空配列 []
  • val: 現在処理中の要素
  • ind: 現在のインデックス

現在の要素の次の要素が存在する場合(arr[ind+1] !== undefined)、2つの要素の差の絶対値を Math.abs() で計算し、累積配列に追加していきます。最後の要素に到達した時点で次の要素は存在しないため、それ以上追加せずそのまま累積配列を返します。

出力

コンソールには次のように出力されます。

[ 1000, 3000, 1000, 3700, 300, 1250 ]

代替手法:slice() と map() を使う方法

より簡潔に書きたい場合は、slice()map() を組み合わせる方法もおすすめです。

const arrayDistance = arr => {
    return arr.slice(1).map((val, ind) => Math.abs(val - arr[ind]));
};

この方法では、先頭要素を除外した新しい配列を作成し、その各要素と元の配列の対応する位置の要素との差を計算しています。どちらのアプローチでも同じ結果が得られるため、可読性やプロジェクトのコーディング規約に応じて使い分けるとよいでしょう。

  1. JavaScript配列で要素を検索する方法を徹底解説!find()メソッドの使い方

    JavaScriptで配列の中から特定の要素を検索したい場面は非常に多くあります。本記事では、最もよく使われるfind()メソッドを中心に、実際に動作するサンプルコードとともに分かりやすく解説します。 find()メソッドとは find()メソッドは、配列の各要素に対して指定したテスト関数(コールバック関数)を実行し、条件を満たした最初の要素の値を返します。条件に一致する要素が存在しない場合は undefined を返します。 基本構文 arr.find(callback(element[, index[, array]])[, thisArg]) callback: 各要素をテストする関数

  2. 複数の値でJavaScript配列の要素を検索する方法

    JavaScriptである配列(arr)が、別の配列(arr1)の複数の値・すべての要素を含んでいるかどうかを確認したい場面はよくあります。そんなときは、every()メソッドとincludes()メソッドを組み合わせることで、シンプルに判定できます。以下はそのサンプルコードです。 コード例 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta name="viewport" content=