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完成了,效果很好,谢谢