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

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

本文关键字:数组 对象 删除 js 键值 下划线      更新时间:2023-09-26

我有以下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},
                 ];

如您所见,我删除了"鲍勃"和"汤姆",只留下 3 个不同的名字。使用下划线可以做到这一点吗?如何?

使用下划线,使用带有自定义转换的_.uniq,像_.property('name')这样的函数会做得很好,或者只是'name',正如@Gruff Bunny在评论中指出的那样:

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}));
})