比较差异的对象数组

时间:2016-06-17 12:32:56

标签: javascript lodash

我需要一些帮助来检查更改的对象数组。 例如,我有一个对象数组,如果他的长度或属性值发生了变化,我需要检测后更改Case它从对象中改变了任何东西,它给了我一个布尔响应。

是否有对此有用的lodash功能?

数组对象示例:

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

4 个答案:

答案 0 :(得分:0)

Lodash的isEqual功能在这种情况下可以帮助您:

_.isEqual(firstArray, secondArray)

请注意,顺序对于数组非常重要:

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

答案 1 :(得分:0)

如果你想根据属性检查两个对象,你可以做这样的事情。

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

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

将obj2名称属性修改为“James”

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

假设你要添加一个新的属性地址,那么它也可以。

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

这是一个有用的链接。 Object comparison in JavaScript

答案 2 :(得分: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]));




答案 3 :(得分:0)

你走了。只是在比较* = list * .map(i => i.XXX)中为XXX设置你要比较的内容。现在它被设置为i.id女巫比较对象的数组listB中具有id的对象的数组listA中的每个项的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))

//返回没有重复的列表:

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
}