【发布时间】:2014-06-20 22:21:05
【问题描述】:
有没有办法根据元素位置的变化来比较数组之间的差异?
我有一个原始对象数组,其中一个元素的值发生了变化,这个变化被映射到一个新数组中:
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] 之间的值没有区别。我在这里试图实现的是一个“严格的区别”,它也会查看索引,从而返回对对象新顺序的一些引用。
【问题讨论】:
-
如果加入pluck的结果呢?这样你就会有一个唯一的字符串。
-
你真的关心 id 索引的变化吗?这似乎无关紧要。还是你关心价值的变化?
-
我关心索引的变化,因为我在 DOM 上使用动画来模拟元素的位置变化。当这个动画结束时,我只是让一个把手助手在 DOM 上渲染排序的元素。 @amandiel 可能有用,我会试试的
标签: javascript arrays sorting underscore.js