- 具有字面值的对象数组意味着,它是一个数组,它的每个元素都是一个对象,而这样的对象的值都是字面量(所以它不会是嵌套对象,对象内的数组等),例如,它可:
[ { 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 的differenceWith和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 个属性值。像这样:
[{lat: 123.321, long: 234.432, radius: 100}, ....] // 10K+ elements
我自己测试过,使用我的方法将花费:
- ~10 秒完成 <= 太慢了
- 由于计算量大,浏览器将冻结 <= 主要问题!
现在,问题是,您能否提供一种更快、更优雅的方法来比较此类样本?
我的一个猜测是我可以通过将其替换isEqual为其他东西来改进,但不确定它在这种情况下是否有帮助。