2017-06-09 18 views
1

私は完全に動作する以下のPlunkrを持っています。2つの配列の相違点を見つけよう

https://plnkr.co/edit/WDjoEK7bAVpKSJbAmB9D?p=preview

これは、2つのアレイに含まれていないすべての配列値を保存するため二つに、lodashの_.differenceWith()関数を使用します。

var result = _.differenceWith(data, test, _.isEqual); 

今、私は2つの問題を抱えて:

1)私たちのプロジェクトで、我々は、機能differenceWithが

2に実装されていない古いLodashバージョンを使用する)、私は一つの値だけを比較する必要があります配列のこれは現在、完全なオブジェクトを比較します。私はidプロパティを比較する必要があります。

+0

'_.filter(ARR、X => x.id = "何か")' – dandavis

+0

Plunkrが完璧に動作しません。 。それは 'ReferenceError:_が定義されていません'と言います。だからあなたの実際のデータは何ですか?表示されたデータには 'id'プロパティはありません。 –

+0

Omgなので大変申し訳ございませんが、何とか間違いがありました。私はそれを更新しました。今すぐ動作するはずです:/ – user5417542

答えて

2

これはid属性に基づくarr2にないオブジェクトがarr1にあることを検出します。

var arr1 = [ { "id": "1" }, { "id": "2" }, { "id": "3" } ]; 
 
var arr2 = [ { "id": "1" }, { "id": "2" } ]; 
 
var result = arr1.filter(o1 => arr2.filter(o2 => o2.id === o1.id).length === 0); 
 
console.log(result);

この例では、lodashを必要としないことに注意してください。

idの代わりに別の比較を使用する場合は、o2.id === o1.idの部分を別のプロパティに変更することができます。ここで

は、より一般的なソリューションです。

var arr1 = [ { "name": "a" }, { "name": "b" }, { "name": "c" } ]; 
 
var arr2 = [ { "name": "a" }, { "name": "c" } ]; 
 
function differenceWith(a1, a2, prop) { 
 
    return a1.filter(o1 => a2.filter(o2 => o2[prop] === o1[prop]).length === 0); 
 
} 
 
var result = differenceWith(arr1, arr2, 'name'); 
 
console.log(result);

関連する問題