javascript - 使用 underscore.js/js 反转父子关系

标签 javascript underscore.js grouping

我有一组名字,每个名字都有一个或多个关联的昵称。我想将其转换为昵称的集合,每个昵称都有一个或多个名称。

这是一个例子。我想转换这个:

[
    {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 也可以。

最佳答案

我想我已经得到了你想要的东西。

由于 Jack1Jack 中出现两次,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"}]}
]

关于javascript - 使用 underscore.js/js 反转父子关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23240295/

相关文章:

javascript - ajax 页面全部重新加载后。

javascript - 调整元素高度以避免双滚动

javascript - 覆盖 javascript 文件 (summernote.js) 中的一些函数

javascript - 使用 Lodash 计算两个标准的总数

javascript - Javascript 中的正则表达式对类别中的项目进行分组

search - 在solr中使用不同的排序顺序对不同的组进行排序

c# - Linq:如何按最大项目数分组

javascript - 如何向ajax传递多个值?

jquery - 扩展 javascript 库(underscore、jquery、backbone 等)

javascript - 如果另一个数组具有相同的元素,则连接数组元素