在_.uniq()中使用两个迭代器

时间:2013-07-25 22:42:52

标签: javascript underscore.js

我理解,给定一个对象数组,我可以使用_.uniq()通过检查每个对象共有的对象属性来过滤掉唯一对象。我想知道,我可以一次检查两个属性吗?

例如:

var foo = [
    {"name":"Steve", "age":"56", "car":"Porsche"}, 
    {"name":"Steve", "age":"56", "car":"Mercedes"}, 
    {"name":"Bill", "age":"57", "car":"Porsche"},
    {"name":"Linus", "age":"56", "car":"Mercedes"}
];

var bar = _.unique(foo, false, function(obj, k, v){
    return obj.name && obj.age;
});

console.log(bar);

我非常希望我能找回史蒂夫,比尔和莱纳斯。但是,it looks as though only obj.age is being checked against

2 个答案:

答案 0 :(得分:6)

此:

return obj.name && obj.age;

表示:

if (!obj.name)
  return obj.name;
return obj.age;

只返回一个值。在您的情况下,由于所有名称都是非空的,因此将返回年龄。

如果您想根据姓名和年龄的组合查找唯一的项目,可以这样做:

return obj.name + "---" + obj.age; // replace "---" with whatever

返回一个根据名称和年龄构建的字符串。

答案 1 :(得分:2)

迭代器函数是一个比较基础。也许不是那里最好的答案,而不是

return obj.name && obj.age;

尝试

return obj.name + '|' + obj.age;