2016-06-17 3 views
-2

変更されたオブジェクトの配列を確認するためのヘルプが必要です。 例えば、私はオブジェクトの配列を持っていて、彼の長さやプロパティの値が変更された場合、後から検出する必要があります。差異のあるオブジェクトの配列を比較します

これに便利な機能がありますか?

配列オブジェクトの例:

[{name: "James", age: 17}, {name: "Maria", age: 17},...] 
+0

Google for "deep equal javascript object" –

答えて

0

LodashのisEqual機能は、あなたは、この場合に役立ちます:順序は、配列のために重要であること

_.isEqual(firstArray, secondArray) 

注:

_.isEqual([1, 2], [2, 1]) // false 
0

あなたがしたい場合はプロパティに基づいて2つのオブジェクトをチェックすると、このようなことができます。

var obj1 = {name: "James", age: 17} 
var obj2 = {name: "Maria", age: 17} 

JSON.stringify(obj1) === JSON.stringify(obj2)// Returns false 

は、あなたが、その後もそれが動作新しいプロパティアドレスを追加したいとしましょう

obj2 = {name: "Maria", age: 17} 
JSON.stringify(obj1) === JSON.stringify(obj2)// Returns true 

obj2のnameプロパティに「ジェームズ」に変更します。

obj2 = {name: "Maria", age: 17,address: "CA"} 
JSON.stringify(obj1) === JSON.stringify(obj2)// Returns false 

ここには役立つリンクがあります。 Object comparison in JavaScript

0

この汎用Object.prototype.compare()方法は、ヘルプであなたが行くそこに

Object.prototype.compare = function(o){ 
 
    var ok = Object.keys(this); 
 
    return typeof o === "object" && ok.length === Object.keys(o).length ? ok.every(k => this[k] === o[k]) : false; 
 
}; 
 

 
var oa = [{name: "James", age: 17}, {name: "Maria", age: 17},{name: "James", age: 17}]; 
 

 
console.log(oa[0].compare(oa[1])); 
 
console.log(oa[0].compare(oa[2])); 
 
console.log(oa[1].compare(oa[1]));

0

かもしれません。ちょうどtoCompare * = list * .map(i => i.XXX)は、あなたが比較しようとしているものをXXXに設定します。

const delRepSort = (listA, listB) => { 
    const toCompareA = listA.map(i => i.id) 
    const toCompareB = listB.map(i => i.id) 
    let list = [] 
    toCompareA.some(i => { 
    const index = toCompareB.indexOf(i) 
    item = listA[toCompareA.indexOf(i)] 
    if(index < 0) { 
     list.push(item) 
    } 
    }) 
    return list 
} 
:今、それが設定されているi.id魔女のために//が無い繰り返してリストを返したために

const compareArrayObjects = (listA, listB) => { 
    const toCompareA = listA.map(i => i.id) 
    const toCompareB = listB.map(i => i.id) 
    let list = [] 
    toCompareB.some(i => { 
     const index = toCompareA.indexOf(i) 
     if(index >= 0) { 
      const item = listA[index] 
      item.id = 'matching id ' + item.id 
      // if you want to have list A with indicated what is matching 
      // list = [ 
      // ...listA.slice(0, index), 
      // item, 
      // ...listA.slice(index + 1) 
      // ] 
      // or you want to have a new array with matching items 
      list.push(item.id) 
      } 
     }) 
    return list 
} 

console.log(compareArrayObjects(listAofObjects, listBofObjects)) 

オブジェクトの配列ListBの中にidを持つオブジェクトの配列リスタ内の各アイテムのIDを比較

関連する問題