在Underscore的_.uniq中使用迭代器函数

时间:2012-10-23 16:34:28

标签: javascript underscore.js

我看过这个Stack问题"Removing duplicate objects with Underscore for Javascript",这正是我想要做的,但没有一个例子有用。实际上我无法使用任何迭代器函数来处理_.uniq。

_.uniq([1, 2, 1, 3, 1, 4]);
> [1, 2, 3, 4]
_.uniq([1, 2, 1, 3, 1, 4], false, function(a){ return a===4;});
> [1, 2, 3, 4]
_.uniq([1, 2, 1, 3, 1, 4], true, function(a){ return a===4;});
> [1, 2, 1, 3, 1, 4]
_.uniq([1, 2, 1, 3, 1, 4], false, function(a){ return false;});
> [1, 2, 3, 4]
_.uniq([1, 2, 1, 3, 1, 4], false, function(a){ return true;});
> [1, 2, 3, 4]

var people = [ { name: 'John', age: 20 }, { name: 'Mary', age: 31 }, { name: 'Kevin', age: 20 }]; 
_.uniq(people, false, function(p){ return p.age; });

> [ { age: 20, name: "John" }, 
    { age: 31, name: "Mary" },
    { age: 20, name: "Kevin" } ]

我愿意:

_.uniq(_.map(people, function(p){ return p.age; }));
> [20, 31]

但它只返回映射值,而不是原始对象。

任何帮助表示赞赏。我使用的是下划线版本1.1.7

1 个答案:

答案 0 :(得分:15)

看起来在1.2.0中引入了_.uniq的比较函数

来自changelog

  

_。uniq现在可以传递一个可选的迭代器,以确定一个对象应该被认为是唯一的标准。