下划线 - 比较对象的两个阵列(位置)(Underscore - Compare two array

2019-10-20 07:38发布

有没有一种方法基于它们的元素位置的改变来比较数组之间的区别是什么?

我有对象的原始阵列,其经历在其上的元件的其中一个值的变化,这种变化被映射到一个新的数组:

   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]。 我想在这里实现是一个“严格区别”,这会看指数为好,从而将一些参考对象的新秩序。

Answer 1:

如何做这种方式:

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


文章来源: Underscore - Compare two arrays of objects (positions)