我试图使用lodash来比较两个对象数组并返回两者之间的差异,然后将其添加到原始数据集中。原因是,新数据将包含原始数据。例如,orgData
中有3个对象,当我请求newData
时,它将包含相同的orgData
加上一个对象。
var orgData = [{
"id": 1000,
"title": "First item"
}, {
"id": 1001,
"title": "Second item"
}];
var newData = [{
"id": 1000,
"title": "First item"
}, {
"id": 1001,
"title": "Second item"
}, {
"id": 1002,
"title": "Third item"
}];
我比较中唯一的分隔符是唯一的id
。我已尝试过以下操作,但我收到的错误是“无法读取' id'未定义'这是有道理的。
_.filter(orgData, function(o, x) {
return o.id !== newData[x].id;
}).forEach(function(x) {
orgData.push(x);
});
答案 0 :(得分:2)
在单独的数据结构中跟踪ID:
var orgDataIds = [];
_.each(orgData, function(value) {
orgDataIds.push(value.id);
})
检查newData中每个对象的id,并在ids数组中找不到相应的id时将对象添加到orgData:
_.each(newData, function(value) {
var id = value.id;
if (orgDataIds.indexOf(id) === -1) {
orgDataIds.push(id);
orgData.push(value);
}
})
当你想要从数组中删除对象时,我不清楚。您打算采用两个数组的交集吗?
答案 1 :(得分:0)
var orgData = [{ “id”:1000, “title”:“第一项” },{ “id”:1001, “标题”:“第二项” }];
var newData = [{ “id”:1000, “title”:“第一项” },{ “id”:1001, “标题”:“第二项” },{ “id”:1002, “标题”:“第三项” }, { “id”:1003, “title”:“Forth item” }];
var newArray = _.union(orgData,newDate)
的console.log(JSON.stringify(newArray)) //这将返回这两个数组的联合