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 个不同的名称。下划线可以吗?怎么样?

使用 Underscore,使用 _.uniq with a custom transformation, a function like _.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}));
})