这是一个数组
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];
}
但我总是得到父===未定义
你不需要 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)));