我需要一些帮助来检查更改的对象数组。 例如,我有一个对象数组,如果他的长度或属性值发生了变化,我需要检测后更改Case它从对象中改变了任何东西,它给了我一个布尔响应。
是否有对此有用的lodash功能?
数组对象示例:
[{name: "James", age: 17}, {name: "Maria", age: 17},...]
答案 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
}