一维数组转为多维

function convertToMultiDimensionalArray(arr) {
  var map = {};
  var roots = [];

  // 将数组元素以ID为键,构建一个映射表
  for (var i = 0; i < arr.length; i++) {
    var item = arr[i];
    item.children = [];

    map[item.id] = item;

    var parentId = item.parentId;
    if (parentId in map) {
      map[parentId].children.push(item);
    } else {
      roots.push(item);
    }
  }

  return roots;
}

var arr = [
  { id: 1, name: "A", parentId: null },
  { id: 2, name: "B", parentId: 1 },
  { id: 3, name: "C", parentId: 1 },
  { id: 4, name: "D", parentId: 2 },
  { id: 5, name: "E", parentId: 2 },
  { id: 6, name: "F", parentId: 3 }
];

var multiDimensionalArray = convertToMultiDimensionalArray(arr);
console.log(multiDimensionalArray);

 在上面的例子中,假设对象有 idnameparentId 属性。我们首先创建一个映射表 map,将每个对象的 id 作为键,然后根据 parentId 将对象连接到其相应的父对象的 children 数组中。如果 parentId 不存在于映射表中,则将该对象视为根元素,并添加到 roots 数组中。最后,返回根元素数组 roots 

posted @ 2023-07-01 17:35  srcQin  阅读(164)  评论(0)    收藏  举报