繁体   English   中英

Underscore.js,根据键值删除对象数组中的重复项

[英]Underscore.js, remove duplicates in array of objects based on key value

我有以下 JS 数组:

var myArray = [{name:"Bob",b:"text2",c:true},
               {name:"Tom",b:"text2",c:true},
               {name:"Adam",b:"text2",c:true},
               {name:"Tom",b:"text2",c:true},
               {name:"Bob",b:"text2",c:true}
               ];

我想消除名称值重复的索引并重新创建一个具有不同名称的新数组,例如:

var mySubArray = [{name:"Bob",b:"text2",c:true},
                  {name:"Tom",b:"text2",c:true},
                  {name:"Adam",b:"text2",c:true},
                 ];

如您所见,我删除了“Bob”和“Tom”,只留下了 3 个不同的名字。 下划线可以做到这一点吗? 如何?

下划线,使用_.uniq与自定义转换,这样的函数_.property('name')会做很好,或只是'name' ,如@Gruff兔子在评论中指出:

var mySubArray = _.uniq(myArray, 'name');

还有一个演示http://jsfiddle.net/nikoshr/02ugrbzr/

如果您使用Lodash而不是Underscore ,请使用@Jacob van Lingen 在评论中给出的示例并使用_.uniqBy

var mySubArray = _.uniqBy(myArray, 'name')

另一个答案绝对是最好的,但如果您有兴趣学习,这里还有一个不会太长的答案,它也会让您接触更多下划线方法:

var mySubArray = []

_.each(_.uniq(_.pluck(myArray, 'name')), function(name) {
    mySubArray.push(_.findWhere(myArray, {name: name}));
})

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM