У меня есть полностью ручной, уродливый способ найти все добавленные, удаленные и измененные объекты (не примитивы) между двумя массивами, и мне интересно, есть ли более быстрый и эффективный способ выполнить sh таким же предмет. Какие-нибудь библиотеки, которые совершают это sh? функция loda sh difference
сообщает мне все различия, а не то, какие из них были добавлены, а какие изменены, поэтому она не выполняет то, что мне нужно.
Вот мой код. Это работает, и я хочу сделать именно это, просто самый эффективный способ:
let previousState = state[0]; //<-- an array of object literals
let currentState = state[1]; //<-- an array of object literals
let added = [];
let removed = [];
let edited = [];
for(let i = 0; i < previousState.length; i++){
let old = previousState[i];
let current = currentState.find(x => x.id === old.id);
if(!current){
removed.push(current);
}
}
for(let i = 0; i < currentState.length; i++){
let current = currentState[i];
let old = previousState.find(x => x.id === current.id);
if(!old){
added.push(current);
continue;
}
if(!_.isEqual(current, old)){ //<-- this is the lodash .isEqual function
edited.push(current);
}
}