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

JavaScriptで配列の合計と積の絶対差を求める方法

本記事では、数値の配列を唯一の引数として受け取り、配列内のすべての数値の合計を計算し、その絶対差を返すJavaScript関数の実装方法を解説します。

例えば、配列 [1, 4, 1, 2, 1, 6, 3] の場合、合計は 18、積は 144 となるため、返される値は |18 − 144| = 126 になります。

実装コード

以下がそのコード例です −

const arr = [1, 4, 1, 2, 1, 6, 3];
const sumProductDifference = (arr = []) => {
    const creds = arr.reduce((acc, val) => {
        let { sum, product } = acc;
        sum += val;
        product *= val;
        return {
            sum, product
        };
    }, {
        sum: 0,
        product: 1
    });
    const { sum, product } = creds;
    return Math.abs(sum - product);
};
console.log(sumProductDifference(arr));

出力

コンソールには以下の出力が表示されます −

126

コードの解説

この関数のポイントは、Array.prototype.reduce() メソッドを使って、配列を一度だけ走査しながら合計と積を同時に計算している点です。

具体的には、初期アキュムレータとして sum: 0product: 1 を設定します。積の計算では初期値を 1 にすることが重要で、0 にしてしまうと結果が必ず 0 になってしまいます。

各要素に対して、合計には加算、積には乗算を行い、最後に Math.abs() を使用して合計と積の差の絶対値を返しています。これにより、どちらが大きい場合でも常に正の値が得られます。

このアプローチは、配列を複数回ループしたり、for 文を別々に書く必要がなく、簡潔で効率的な実装となっています。

  1. C言語の配列とポインタの違いとは?基本からサンプルコードまで徹底解説

    C言語において、配列は同じ型の複数の要素を連続的に格納するためのデータ構造です。一方、ポインタは変数のアドレス(メモリ上の場所)を保持するための特殊な変数です。 実は配列変数自体にもアドレスが存在するため、ポインタを使ってその先頭アドレスを指すことができます。さらに、ポインタ演算を利用すれば配列内の各要素を順番にたどることも可能です。 配列に対してポインタを使用するメリットは主に2つあります。1つ目は、動的に確保した配列のアドレスをポインタに格納できること、2つ目は、関数へ配列を渡す際にポインタを利用できることです。以下に、配列とポインタの主な違いをまとめます。 配列とポインタの主な違い s

  2. C言語におけるポインタと配列の違いを徹底解説!基本からサンプルコードまで

    はじめに C言語において「ポインタ」と「配列」は非常によく似た挙動を示すため、初心者が混同しやすい概念の一つです。しかし、両者はメモリの扱い方や性質がまったく異なります。本記事では、それぞれの特徴を具体例とともに解説し、違いを明確にしていきます。 ポインタとは ポインタとは、別の変数のアドレス(メモリ上の場所)を格納するための変数です。変数にメモリが割り当てられると、ポインタはその変数が配置されたメモリアドレスを指します。ポインタ変数を宣言する際には、単項演算子「*(間接参照演算子)」を使用します。 ポインタ宣言の構文 データ型 *変数名; ここで、「データ型」には int や char、