有没有办法根据元素位置的变化来比较数组之间的差异?
我有一个原始的对象数组,它对其中一个元素的值进行了更改,这个更改被映射到一个新数组中:
origElements = [{id: 1, value: 50},
{id: 2, value: 60},
{id: 3, value: 70}]
changedElements = [{id: 1, value: 50},
{id: 3, value: 60},
{id: 2, value: 120}]
var diff = _.difference(_.pluck(origElements, "id"), _.pluck(changedElements, "id"));
var result = _.filter(origElements, function(obj) { return diff.indexOf(obj.id) >= 0; });
在这种情况下,很明显为什么“结果”不会返回任何内容。由于:[1,2,3]和[1,3,2]之间的值没有差异。我在这里想要实现的是一个“严格的差异”,它也会查看索引,从而返回一些对象的新顺序的引用。
答案 0 :(得分:2)
这样做怎么样:
var origElements = [{
id: 1,
value: 50
}, {
id: 2,
value: 60
}, {
id: 3,
value: 70
}];
var changedElements = [{
id: 1,
value: 50
}, {
id: 3,
value: 60
}, {
id: 2,
value: 120
}];
var origElementsIds = _.pluck(origElements, "id");
var changedElementsIds = _.pluck(changedElements, "id");
console.log("Are array element positions same ?",
origElementsIds.join() === changedElementsIds.join());