使用lodash比较和从数组中删除对象

时间:2014-10-23 13:30:12

标签: javascript arrays object lodash

我试图使用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);
});

2 个答案:

答案 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)) //这将返回这两个数组的联合