JavaScriptで2つの配列を比較してnullで埋めた新しい配列を生成する方法
JavaScriptでは、2つの配列を比較して第3の配列を作成する関数が必要になることがあります。具体的には、2つ目の配列のすべての要素を新しい配列に格納し、1つ目の配列には存在するが2つ目の配列には欠けている要素の位置には null を挿入します。
具体例
たとえば、次のような2つの配列があったとします。
const arr1 = ['f', 'g', 'h'];
const arr2 = ['f', 'h'];
この場合、期待される出力は以下のようになります。
const output = ['f', null, 'h'];
1つ目の配列には 'g' が含まれていますが、2つ目の配列には存在しないため、その位置が null で埋められているのが分かります。
実装コード
それでは、この処理を行う関数のコードを見ていきましょう。
const arr1 = ['f', 'g', 'h'];
const arr2 = ['f', 'h'];
const compareAndFill = (arr1, arr2) => {
let offset = 0;
const res = arr1.map((el, i) => {
if (el === arr2[offset + i]) {
return el;
}
offset--;
return null;
});
return res;
};
console.log(compareAndFill(arr1, arr2));
コードの解説
この関数の仕組みは次のとおりです。
offset変数: これまでに挿入したnullの数を追跡します。nullを挿入するたびに-1されるため、2つ目の配列のインデックスが正しく対応するよう調整されます。map()メソッド: 1つ目の配列(arr1)の各要素に対して処理を実行します。- 比較処理: 各要素
elが、オフセットを考慮した2つ目の配列の対応する要素arr2[offset + i]と一致するかどうかを判定します。 - 戻り値: 一致すればその要素をそのまま返し、一致しなければ
offsetをデクリメントしたうえでnullを返します。
実行結果
コンソールに出力される結果は以下のとおりです。
[ 'f', null, 'h' ]
このように、オフセットを使ったインデックス調整により、要素が欠けている位置を正確に検出し、null で埋めることができます。
-
JavaScriptのconst宣言とは?再代入できない変数の基本と使い方を解説
JavaScriptのconst宣言は、値を再代入することも後から再宣言することもできない変数を作成するための構文です。constはES2015(ES6)で導入されました。 const宣言の主な特徴 一度値を代入すると、別の値に再代入することはできません。 同じ名前の変数を同じスコープ内で再宣言するとエラーになります。 宣言時に必ず初期値を代入する必要があります。 ブロックスコープ({}内でのみ有効)を持ちます。 それでは、JavaScriptにおけるconst宣言の実際のコードを見ていきましょう。 サンプルコード <!DOCTYPE html> <html>
-
JavaScriptで2つの配列をマージして重複を削除する方法
課題 JavaScriptで、2つの数値の配列 arr1 と arr2 を引数として受け取る関数を作成することを考えます。 この関数は、両方の配列の要素を1つの新しい配列にマージします。マージの前後いずれかの時点で重複する要素が存在した場合には、余分なコピーを削除し、各要素が必ず1回だけ現れるようにしなければなりません。 要素の並び順は厳密には問われませんが、各要素の出現回数(必ず1回であること)が重要なポイントになります。 入力例 const arr1 = [6, 5, 2, 1, 8]; const arr2 = [3, 4, 6, 8, 9]; この場合、期待される出力は次のとおりです。