我不想删除重复项,我希望能够使用函数处理副本。
关于如何在_.chain
中做到这一点的任何想法?
_.chain(users)
.map(function(user)
{
return [user.username, user]
})
.object() //but handle the duplicate collisions instead of losing them
.value();
具体来说,我想在发生用户名冲突时更改用户名,理想情况是:
.object(values, function duplicateHandler(value)
{
value.username = value.username + '_' + 1;
});
如果它还可以重新应用以重新检查其独特性,那就太棒了。
答案 0 :(得分:1)
您可以执行以下操作,将具有相同用户名的所有记录组合在一个数组中:
_.chain(users)
.groupBy('username')
.value();
或者这是以你喜欢的方式处理它们
_.chain(users)
.groupBy('username')
.map(function(userArray, username) { ... })
.object()
.value();
例如:
var users = [
{ username: 'one' },
{ username: 'two' },
{ username: 'two' }
];
var obj =
_.chain(users)
.groupBy('username')
.map(function(userArray, username) {
return (userArray.length === 1)
? [[username, userArray[0]]]
: _.map(userArray, function(v, i) {
return [username + '_' + (i+1), v]
});
})
.flatten(true)
.object()
.value();
console.log(obj);
将产生:
{one: Object, two_1: Object, two_2: Object}
Object
表示users
中声明的原始对象的引用。