JavaScriptで2つの数値配列の対応する要素の絶対差を求める方法
はじめに
JavaScriptでは、次のような2つの配列が与えられたとします。
const arr1 = [1,2,3,4,5,6]; const arr2 = [9,8,7,5,8,3];
ここで求めたいのは、これらの配列の対応する位置にある要素同士の差(絶対値)を計算し、その結果を新しい配列として返す関数です。
上記の配列の場合、期待される出力は以下のようになります。
const output = [8,6,4,1,3,3];
実装のアプローチ
この問題は、forループで各要素を順番に取り出し、Math.abs() メソッドで差の絶対値を求めながら新しい配列へ追加していき、最後にその配列を返すというシンプルな方法で解決できます。
それでは、実際のコードを見てみましょう。
コード例
const arr1 = [1,2,3,4,5,6];
const arr2 = [9,8,7,5,8,3];
const absDifference = (arr1, arr2) => {
const res = [];
for(let i = 0; i < arr1.length; i++){
const el = Math.abs((arr1[i] || 0) - (arr2[i] || 0));
res[i] = el;
};
return res;
};
console.log(absDifference(arr1, arr2));
出力結果
コンソールには以下のように表示されます。
[ 8, 6, 4, 1, 3, 3 ]
コードのポイント
この実装における重要なポイントは以下の通りです。
- Math.abs() の活用: 計算結果が負の値になった場合でも、常に正の値(絶対値)に変換されます。
- (arr[i] || 0) による安全策: 2つの配列の長さが異なる場合でも、undefined との演算による NaN の発生を防ぎ、存在しない要素は自動的に 0 として扱われます。
- アロー関数の採用: 関数定義を簡潔に記述でき、コードの可読性が向上します。
別の書き方:map() を使ったモダンな実装
より現代的なスタイルとしては、Array.prototype.map() を使う方法もあります。
const absDifference = (arr1, arr2) => arr1.map((num, i) => Math.abs(num - (arr2[i] || 0))); console.log(absDifference([1,2,3,4,5,6], [9,8,7,5,8,3])); // 出力: [ 8, 6, 4, 1, 3, 3 ]
map() メソッドを使うことで、ループ処理がより宣言的になり、コードも大幅に短くなります。ただし、この方法では第1引数の配列を基準に処理が行われるため、第2引数の配列の方が長い場合は余分な要素が無視される点に注意してください。
-
JavaScriptのconst宣言とは?再代入できない変数の基本と使い方を解説
JavaScriptのconst宣言は、値を再代入することも後から再宣言することもできない変数を作成するための構文です。constはES2015(ES6)で導入されました。 const宣言の主な特徴 一度値を代入すると、別の値に再代入することはできません。 同じ名前の変数を同じスコープ内で再宣言するとエラーになります。 宣言時に必ず初期値を代入する必要があります。 ブロックスコープ({}内でのみ有効)を持ちます。 それでは、JavaScriptにおけるconst宣言の実際のコードを見ていきましょう。 サンプルコード <!DOCTYPE html> <html>
-
JavaScriptで2つの直方体の体積差を求める方法
問題JavaScriptで、2つの直方体(キューボイド)の長さ・幅・高さを指定する配列を受け取る関数を作成します。この関数は、それぞれの直方体の体積を計算し、その絶対差(差の絶対値)を返す必要があります。直方体の体積は「長さ × 幅 × 高さ」で求められるため、まず各直方体の体積を算出し、Math.abs()メソッドを使って2つの体積の差の絶対値を取得します。コード例以下が実際のコードです。const h1 = 10; const w1 = 12; const l1 = 15; const h2 = 12; const w2 = 15; const l2 = 9; const findVol