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

Bis*_*opZ 19 javascript underscore.js

我看过这个Stack问题,"使用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" } ]
Run Code Online (Sandbox Code Playgroud)

我会做:

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

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

任何帮助赞赏.我使用下划线版本1.1.7

小智 22

我有同样的问题.这是因为_.uniq()返回一个新的简化数组,因此你必须将它赋予变量.因此,通过这一点修正,它必须起作用.

var people = [{name:'John',年龄:20},{name:'Mary',年龄:31},{name:'Kevin',年龄:20}];

people = _.uniq(people,false,function(p){return p.age;});

[{年龄:20,姓名:"John"},{年龄:31,姓名:"Mary"}]


ben*_*ben 15

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

来自更改日志:

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