Javascript 下划线u.object,但具有重复的处理程序函数,是否可能?

Javascript 下划线u.object,但具有重复的处理程序函数,是否可能?,javascript,underscore.js,Javascript,Underscore.js,我不想删除重复项,我希望能够使用函数处理重复项 关于如何在\uuu.chain中很好地完成它,有什么想法吗 _.chain(users) .map(function(user) { return [user.username, user] }) .object() //but handle the duplicate collisions instead of losing them .value(); 具体地说,当我遇到用户名冲突时,我

我不想删除重复项,我希望能够使用函数处理重复项

关于如何在
\uuu.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;
});

如果它还可以重新应用自身来重新检查唯一性,那就太棒了。

您可以这样做,将具有相同用户名的所有记录组合在一个数组中:

_.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}
{one:Object,two_1:Object,two_2:Object}
其中,
Object
表示在
users
中声明的原始对象的引用


您可能只想使用
。.groupBy(用户,“用户名”)
?是的,很长的路要走,就是按用户名分组,重命名并重试,直到不再发生冲突,我只是认为这是一个可以很好地解决的常见情况。我想知道您正在尝试做什么。是否将
\u 1
附加到所有属性名称?如果只写没有下划线的代码可能会容易得多。我最终还是用groupBy完成了,效果很好,谢谢