- Массив объектов с литеральными значениями означает, что это массив, каждый его элемент является объектом, в то время как все значения такого объекта являются литералами (поэтому он выигралЭто могут быть вложенные объекты, массив внутри объекта и т. д.), например:
[ { name: 'Bob', age: 20, isMale: true }, { name: 'Alice', age: 19, isMale: false}, ... ]
Сравнить означает, что мы должны различать
added
и
removed
элементы, например:
const original = [ { name: 'Bob', age: 20, isMale: true }, { name: 'Alice', age: 19, isMale: false} ];
const modified = [ { name: 'Alice', age: 19, isMale: false}, { name: 'Jay', age: 21, isMale: true } ];
// then added = [{ name: 'Jay', age: 21, isMale: true }]
// and removed = [{ name: 'Bob', age: 20, isMale: true }]
Мой подход:используя lodash разность с и isEqual , чтобы заставить вещи работать, например:
const original = [ { name: 'Bob', age: 20, isMale: true }, { name: 'Alice', age: 19, isMale: false} ];
const modified = [ { name: 'Alice', age: 19, isMale: false}, { name: 'Jay', age: 21, isMale: true } ];
const removed = _.differenceWith(original, modified, _.isEqual);
const added = _.differenceWith(modified, original, _.isEqual);
^ Однако, этоне достаточно быстро !! У меня есть выборка из двух массивов, каждый массив содержит 10K + объектов, в то время как каждый объект имеет 3 свойства с lietal значениями. как это:
[{lat: 123.321, long: 234.432, radius: 100}, ....] // 10K+ elements
Я тестировал сам, использование моего подхода обойдется:
- ~ 10 секунд для завершения <= слишком медленно </li>
- браузер будетзависание из-за больших вычислений <= главная проблема! </li>
Теперь вопрос заключается в том, можете ли вы предоставить более быстрый и более элегантный способ Сравнить такие образцы?
Одно из моих предположений - я могу улучшить, заменив isEqual
на что-то другое, но не уверен, поможет ли это в такой ситуации.