はじめに
JavaScriptで配列の差分を処理する方法を考察します。
なお、本記事では以下の記事を大変参考にさせていただきました。
JavaScriptで2つの配列の差分を抽出する - Qiita
js 二つの配列の差分を求める - Qiita
差分の処理を関数で渡してしまう
JavaScriptだと関数の引数に関数が渡せるので、差分の要素の処理を引数に関数として渡せたら面白いかなと思いまして以下のコードを考えました。
const a = [1, 2, 3, 4];
const b = [3, 4, 5, 6];
// xにあってyにないものに対してopeに渡した関数の処理をする関数
function getDiff(x, y, ope){
x.forEach(item =>{
if(!y.includes(item)){
ope(item);
}
})
}
// aにあってbにないものを表示する
getDiff(a, b, item => console.log('a include and b do not inclode :' +item));
// bにあってaにないものを表示する
getDiff(b, a, item => console.log('b include and a do not inclode :' +item));
結果
a include and b do not inclode :1
a include and b do not inclode :2
b include and a do not inclode :5
b include and a do not inclode :6
getDiffでは、配列x,yを受け取り、xにあってyにない要素に対してopeで渡された処理を行います。
opeはただconsole.logで結果を表示してるだけですが、関数自体を渡してしまえるので色々と使いわませます。
例えば差分だけのリストを作ることも出来ます。
// 差分だけのリストを作る
let diffArray = new Array();
getDiff(a, b, item => diffArray.push(item));
getDiff(b, a, item => diffArray.push(item));
console.log(diffArray);
結果
(4) [1, 2, 5, 6]