2014-10-23 3 views
0

Я пытаюсь использовать lodash для сравнения двух массивов объектов и возврата разницы между ними, а затем добавления его в исходный набор данных. Причина состоит в том, что новые данные будут содержать те же данные из оригинала. Например, у меня есть 3 объекта в orgData, и когда я запрашиваю newData, он будет содержать то же самое orgData плюс еще один объект.Использование lodash для сравнения и удаления объекта из массива

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 »undefined», что имеет смысл.

_.filter(orgData, function(o, x) { 
    return o.id !== newData[x].id; 
}).forEach(function(x) { 
    orgData.push(x); 
}); 
+0

Этот вопрос может помочь вам: http://stackoverflow.com/questions/25764719/update-if-exists-or-add-new-element-to-array-of-objects-elegant-way-in-javascr – benhowdle89

+0

Это вроде как, но это doesn 'help, когда newData имеет большую или меньшую длину, чем orgData. Как узнать, как добавить объект в массив или удалить объект из массива. – hybrid9

ответ

2

Следите идентификаторы в отдельной структуре данных:

var orgDataIds = []; 

_.each(orgData, function(value) { 
    orgDataIds.push(value.id); 
}) 

Проверьте идентификатор каждого объекта в NewData, и добавить объект orgData, когда соответствующий идентификатор не найден в идентификаторах массив:

_.each(newData, function(value) { 
    var id = value.id; 
    if (orgDataIds.indexOf(id) === -1) { 
     orgDataIds.push(id); 
     orgData.push(value); 
    } 
}) 

Мне не ясно, когда вы хотите удалить объекты из массива. Вы намерены взять пересечение двух массивов?

0

вар orgData = [{ "идентификатор": 1000, "Название": "Первый пункт" }, { "идентификатор": 1001, "Название": "Второй пункт" }];

вар NewData = [{ "идентификатор": 1000, "Название": "Первый пункт" }, { "идентификатор": 1001, "Название": "Второй пункт" }, { "идентификатор": 1002, "название": "Третий элемент" }, { "идентификатор": 1003, "название": "Четвертый пункт" }];

вар newArray = _.union (orgData, newDate)

console.log (JSON.stringify (newArray)) // это вернет объединение этого два массива

Смежные вопросы