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