函数的文档uniq()
提到,如果对列表进行排序,它会运行得更快。使用链式调用也可以提高可读性。所以你可以这样做:
_.chain(c1).union(c2).sortBy("a").uniq(true, function(item){ return item.a; }).value();
或者,如果您更喜欢未链接的版本(短 11 个字符但可读性较差):
_.uniq(_.sortBy(_.union(c1,c2),"a"),true, function(item){ return item.a; });
的文档和示例uniq()
没有说明回调函数的工作原理。函数的算法uniq()
在两个列表中的每个元素上调用此函数。如果此函数的结果相同,则会删除该元素(假设它是重复的)。
union()
事实上,在数组上调用时可以防止重复。我们也可以使用这个事实:
_.map(_.union(_.pluck(c1,"a"),_.pluck(c2,"a")),function (item) {return {a:item};});
上面的like首先将对象列表转换为简单数组(pluck()
),然后将它们组合使用union()
并最终用于map()
创建对象列表。
参考:uniq()