Javascript 下划线-比较两个对象数组(位置)

Javascript 下划线-比较两个对象数组(位置),javascript,arrays,sorting,underscore.js,Javascript,Arrays,Sorting,Underscore.js,是否有一种方法可以根据元素位置的变化来比较数组之间的差异 我有一个原始的对象数组,其中一个元素的值发生了变化,这个变化被映射到一个新数组中: origElements = [{id: 1, value: 50}, {id: 2, value: 60}, {id: 3, value: 70}] changedElements = [{id: 1, value: 50}, {

是否有一种方法可以根据元素位置的变化来比较数组之间的差异

我有一个原始的对象数组,其中一个元素的值发生了变化,这个变化被映射到一个新数组中:

   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; });

在这种情况下,很清楚为什么“result”不会返回任何结果。[1,2,3]和[1,3,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());

如果你加入拔毛的结果呢?这样你就有了一个唯一的字符串。你真的关心id索引的变化吗?这似乎无关紧要。或者你关心值的变化吗?我关心索引的变化,因为我使用DOM上的动画来模拟元素改变位置。当这个动画结束时,我只让一个handlebars助手在DOM上渲染排序的元素@amandiel那可能有用我要试试