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

JavaScriptで配列を降順に並べ替えて隣接要素の差の合計を求める方法


問題

整数の配列を受け取るJavaScript関数を作成する必要があります。この関数は、配列を降順に並べ替えたうえで、隣り合う要素同士の差を順番に足し合わせ、その合計値を返すものです。

たとえば、次のような配列が渡された場合を考えてみましょう。

[6, 2, 15]

この場合、期待される出力は次のとおりです。

(15 - 6) + (6 - 2) = 13

解決のアプローチ

この問題は、以下の手順でシンプルに解くことができます。


  1. sort()メソッドを使い、配列を降順(大きい順)に並べ替える。
  2. 隣接する2つの要素(i番目と i + 1 番目)の差を計算し、合計に加算していく。
  3. 配列の要素が1個以下の場合は差が存在しないため、0 を返す。


なお、降順に並べ替えた後の隣接要素の差は必ず0以上になるため、合計は常に正の値になります。実は数学的には、この合計は「最大値 − 最小値」と一致するという性質もあります。

コード例

以下が実際のコードです。

const arr = [6, 2, 15];
const sumDifference = (arr = []) => {
    // 配列を降順に並べ替え
    const descArr = arr.sort((a, b) => b - a);

    // 要素が1個以下なら差は存在しない
    if (descArr.length <= 1) {
        return 0;
    }

    let total = 0;
    for (let i = 0; i < descArr.length - 1; i++) {
        total += (descArr[i] - descArr[i + 1]);
    }
    return total;
};
console.log(sumDifference(arr));


補足: Array.prototype.sort() は元の配列を直接書き換える(破壊的な)メソッドです。元の配列を保持したい場合は、[...arr].sort((a, b) => b - a) のようにスプレッド構文でコピーしてからソートすると安全です。

出力結果

上記のコードを実行すると、コンソールには次のように出力されます。

13

(15 − 6) + (6 − 2) = 9 + 4 = 13 となり、意図した通りの結果が得られています。


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

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

  2. 【JavaScript】配列内のネストされたオブジェクトの値を合計する方法

    この記事では、JavaScriptを使って、配列内にネストされた(入れ子構造の)オブジェクトの値を合計する方法を解説します。サンプルコードでは、JSONデータの複数階層に格納された数値(costNum)を順番に取り出し、その合計をブラウザ上に表示します。 コード例 <!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=d