javascript - 使用 javascript 将平面数组转换为嵌套数组

标签 javascript arrays multidimensional-array nested

我希望将这个平面数组转换为嵌套数组,但它始终返回为空。不知道如何解决这个问题或我缺少什么,但这让我发疯。

平面数组:

var names =[
{ name: 'b', parent: 'Brown' },
{ name: 'a', parent: 'Brown' },
{ name: 'h', parent: 'Green' },
{ name: 'c', parent: 'Green' },
];

所需的数组输出:

[{
    name: 'Brown',
    children: [{
            name: 'a',
            children: []
        },
        {
            name: 'b',
            children: []
        }
    ]
}, {
    name: 'Green',
        children: [{
                name: 'h',
                children: []
            },
            {
                name: 'c',
                children: []
            }
        ]
    }
}]

Js:

function getNestedChildren(arr, parent) {
    var children = [];
    for(var i =0; i < arr.length; ++i) {
        if(arr[i].parent == parent) {
            var grandChildren = getNestedChildren(arr, arr[i].name)

            if(grandChildren.length) {
                arr[i].children = grandChildren;
            }
            children.push( arr[i]);
        }
    }
    return children;
}
var nest = getNestedChildren(names, names.parent);
console.log( nest);

最佳答案

var names =[
{ name: 'b', parent: 'Brown' },
{ name: 'a', parent: 'Brown' },
{ name: 'h', parent: 'Green' },
{ name: 'c', parent: 'Green' },
{ name: 'j', parent: 'Brown' }
];

function groupBy(arr, f) {
  return arr.reduce((r, v, i, a, k = f(v)) => ((r[k] || (r[k] = [])).push(v), r), {});
}

function nestArray(array){
  var newArray=[],
      resultGrouped = groupBy(names, function(c) {
    return c.parent
  });
  
  for (var key in resultGrouped){
    var item=resultGrouped[key];
    
    newArray.push({
      name:key,
      children:item.map(function(map){
        delete map.parent;
        map.children=[];
        return map;
      })
    });
  }
  
  return newArray;
}
console.log(nestArray(names));

关于javascript - 使用 javascript 将平面数组转换为嵌套数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50138420/

相关文章:

javascript - Axios 发布表单数据在 native react 中无法正常工作

php - foreach 只查找数组的最后一个元素

python - 如何在python中将字符串数组拆分为二维字符数组

C:在 main 期间使用在函数中创建的二维数组

ios - 快速具有多个部分的 TableView

python - 如何将值作为索引的函数赋值给 numpy 数组?

javascript - XMPP 连接到 openfire 服务器

javascript - 不能在 NgModule 中声明模块,因为它不是当前编译 Angular 的一部分

javascript - 由 var 分隔的嵌套选择失败

arrays - Sonar 问题 : remove use of String(byte[])