2016-05-24 10 views
1

私は2つのJSON配列している除外:は、長さの異なる二つの配列を比較し、一致

{"Array1":[ 
    { "_id": "1234"}, 
    { "_id": "5678"}, 
    { "_id": "3456"} ]} 

{"Array2":[ 
    { "_id": "1234"}, 
    { "_id": "5678"} ]} 

がどのように私はNode.jsの二つを比較してArray1からの唯一の違いを返すかを?

私は次のことをしようとしています

if (Array1.every(function (u, i) { return u._id === Array2[i]._id;})) { 
    Array1.splice(i, 1); 
} 

答えて

2

それはその意図した機能ではないので、私は、同じ_id SをフィルタリングするタスクのためArray.prototype.everyを使用することはありません。

、以下のようにする代わりに、私は、Array.prototype.mapと一緒に、あなたはArray.prototype.filterメソッドを使用することをお勧め:

const obj1 = {"Array1":[ 
 
    { "_id": "1234"}, 
 
    { "_id": "5678"}, 
 
    { "_id": "3456"} ]}; 
 

 
const obj2 = {"Array2":[ 
 
    { "_id": "1234"}, 
 
    { "_id": "5678"} ]}; 
 

 

 
console.log(obj1.Array1.filter(a1 => obj2.Array2.map(a2 => a2._id).indexOf(a1._id) < 0));

ES5:

var obj1 = {"Array1":[ 
 
    { "_id": "1234"}, 
 
    { "_id": "5678"}, 
 
    { "_id": "3456"} ]}; 
 

 
var obj2 = {"Array2":[ 
 
    { "_id": "1234"}, 
 
    { "_id": "5678"} ]}; 
 

 

 
console.log(obj1.Array1.filter(function (a1) { 
 
    return obj2.Array2.map(function (a2) { 
 
    return a2._id; 
 
    }).indexOf(a1._id) < 0; 
 
}));

+0

しかし、私が探しているのは、私のnode.jsページのラムダ式の構文エラーです。 –

+0

@RudolfLamprechtあなたはノードv6.xを使用していますか?上記のすべてのコードは、ES6の適用範囲が今や本当に良いのでうまくいきます。 – timolawl

+0

@RudolfLamprecht私はES5バージョンを追加しました。それに問題はないはずです。 – timolawl

関連する問題