在对象数组中添加 val.hierarchy

问题描述 投票:0回答:1

这是一个数组

const arr = [
  {name: "Earth", id: 1, parent_id: -1},
  {name: "Europe", id: 2, parent_id: 1},
  {name: America": id: 3, parent_id: 1},
  {name: "Asia", id: 4, parent_id: 1}
];

我需要向数组的每个元素添加一个层次结构键,其中将包含该数组

const arr = [
  {name: "Earth", id: 1, parent_id: -1, hierarchy: ["Earth"]},
  {name: "Europe", id: 2, parent_id: 1, hierarchy: ["Earth", "Europe"]},
  {name: America": id: 3, parent_id: 1, hierarchy: ["Earth", "America"]},
  {name: "Asia", id: 4, parent_id: 1, hierarchy: ["Earth", "Asia"]}
];

我正在尝试使用 lodash find 来做到这一点

const parent = _.find(arr, { id: val.parent_id });

    if (parent === undefined) {
      val.hierarchy = [val.id];
    } else {
      val.hierarchy = [...parent.hierarchy, val.id];
    }

但我总是得到父===未定义

javascript lodash
1个回答
0
投票

你不需要 lodash。只需将项目收集到一个对象中并使用它来获取路径:

const arr = [
  {name: "Earth", id: 1, parent_id: -1},
  {name: "Europe", id: 2, parent_id: 1},
  {name: "America", id: 3, parent_id: 1},
  {name: "Asia", id: 4, parent_id: 1}
];

const items = {};
arr.forEach(item => items[item.id] = item);

const traverse = item => item ? [...traverse(items[item.parent_id]), item.name] : [];

const result = arr.map(item => ({...item, hierarchy: traverse(item)}));

result.forEach(i=>console.log(JSON.stringify(i)));

© www.soinside.com 2019 - 2024. All rights reserved.