我有一组名字,每个名字都有一个或多个相关的昵称。我想将其转换为昵称集合,每个昵称都有一个或多个名称。
这是一个例子。我想转换一下:
[
{id:1, name:'Jack', children:[{nickname:'Jack1'},{nickname:'Jack1'}]},
{id:2, name:'Sam', children:[{nickname:'Sam1'}, {nickname:'Sam2'}]},
{id:3, name:'Tom', children:[{nickname:'Tom1'}, {nickname:'Tom2'}]},
]
进入这个:
[
{nickname:'Jack1', obj:[{id:1,name:"Jack"},{id:1,name:'Jack'}]},
{nickname:'Sam1', obj:[{id:2,name:'Sam'}]},
{nickname:'Sam2', obj:[{id:2,name:'Sam'}]},
{nickname:'Tom1', obj:[{id:3,name:'Tom'}]},
{nickname:'Tom2', obj:[{id:3,name:'Tom'}]}
]
我更喜欢使用下划线的解决方案,但JavaScript也可以。
答案 0 :(得分:2)
我想我已经得到了你想要的东西。
由于Jack1
在Jack
中出现两次,Jack
必须在Jack1
中出现两次:
var a = [
{id:1, name:'Jack', children:[{nickname:'Jack1'},{nickname:'Jack1'}]},
{id:2, name:'Sam', children:[{nickname:'Sam1'}, {nickname:'Sam2'}]},
{id:3, name:'Tom', children:[{nickname:'Tom1'}, {nickname:'Tom2'}]},
]
var b = [];
for(var i = 0; i < a.length; i++){
for(var j = 0; j < a[i].children.length; j++){
if(b.filter(function(e){
return e.hasOwnProperty('nickname') && e.nickname == a[i].children[j].nickname;
}).length === 0){
b.push({
nickname: a[i].children[j].nickname,
obj:[{id:a[i].id, name: a[i].name}]});
}else{
for(var k = 0; k < b.length; k++){
if(b[i].nickname == a[i].children[j].nickname){
b[i].obj.push({id:a[i].id, name: a[i].name})
}
}
}
}
}
console.log(b);
// Result:
[
{"nickname": "Jack1", "obj": [{"id": 1, "name": "Jack"},
{"id": 1, "name": "Jack"}]},
{"nickname": "Sam1", "obj": [{"id": 2, "name": "Sam"}]},
{"nickname": "Sam2", "obj": [{"id": 2, "name": "Sam"}]},
{"nickname": "Tom1", "obj": [{"id": 3, "name": "Tom"}]},
{"nickname": "Tom2", "obj": [{"id": 3, "name": "Tom"}]}
]