JavaScriptで配列内の隣接要素間の差分を求める方法
数値リテラルからなる配列が与えられ、その配列内の連続する2つの要素の絶対差を返す関数を作成することを目標とします。
例えば、以下のようなケースを考えてみましょう。
入力配列: [23, 53, 66, 11, 67] 出力結果: [30, 13, 55, 56]
出力を見ると、各要素は元の配列の隣接する値どうしを比較した差になっていることがわかります。具体的には次のように計算されています。
- |23 − 53| = 30
- |53 − 66| = 13
- |66 − 11| = 55
- |11 − 67| = 56
実装の考え方
この問題を解くには、インデックス1から配列の末尾まで繰り返し処理を行うforループを使用します。ループの中で、現在の要素 arr[i] と直前の要素 arr[i - 1] の絶対差を Math.abs() で算出し、新しい配列へ順番に追加していきます。
それでは、実際のコードを見てみましょう。
コード例
var arr = [23, 53, 66, 11, 67];
const createDifference = (arr) => {
const differenceArray = [];
for (let i = 1; i < arr.length; i++) {
differenceArray.push(Math.abs(arr[i] - arr[i - 1]));
};
return differenceArray;
}
console.log(createDifference(arr));実行結果
このコードをコンソールで実行すると、以下の出力が得られます。
[ 30, 13, 55, 56 ]
補足:より簡潔に書く方法
forループの代わりに、slice() と map() を組み合わせることで、同じ処理をより宣言的に記述することもできます。
const createDifference = (arr) => arr.slice(1).map((val, i) => Math.abs(val - arr[i])); console.log(createDifference([23, 53, 66, 11, 67])); // [ 30, 13, 55, 56 ]
どちらの方法でも結果は同じですが、ループを使う方法は初心者にも理解しやすく、map() を使う方法はコードが短く簡潔になるという利点があります。用途やチームのコーディングスタイルに応じて使い分けるとよいでしょう。
-
JavaScript DOMとは?基本の仕組みと要素の取得方法をわかりやすく解説
JavaScriptのDOM(Document Object Model:ドキュメントオブジェクトモデル)は、Webページ上のHTML要素を表現する仕組みです。DOMはインターフェースとして機能し、ページのコンテンツやスタイルを変更することで、Webページを自由に操作できるようにします。 DOMにアクセスするには、Webページ上で右クリックして「検証(Inspect)」を選択します。すると画面の右側または左側にパネルが表示され、現在閲覧しているページのHTML要素を確認できます。要素にマウスカーソルを合わせると、ページ上の該当部分がハイライトされるため、どの要素がページのどのセクションに対応
-
JavaScriptで配列の要素を同じ配列内に複製する方法
JavaScriptでは、concat()メソッドとsort()メソッドを組み合わせることで、既存の配列の要素を同じ配列内に複製することができます。ここでは、実際に動作するサンプルコードを使って、その手順をわかりやすく解説します。 コード例 以下は、配列の要素を同じ配列内に複製するためのコード例です。 <!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8" /> <meta name="viewport" cont