如何将与 parent 相同的 id 应用于同一级别的 children 数组?

How to apply same id as parent to children array in the same level?

我有以下object

[
    { name: "parent", id: 1 },
    { name: "children", id: 2 },
    { name: "children", id: 3 },
    { name: "parent", id: 4 },
    { name: "children", id: 5 }
]

如您所见,parent和children都处于同一水平。我需要做的是将 children 与 parent 连接起来,将 parent id 应用到具有新属性的 children 数组。像这样:

[
    { name: "parent", id: 1 },
    { name: "children", id: 2, parentId: 1 },
    { name: "children", id: 3, parentId: 1 },
    { name: "parent", id: 4 },
    { name: "children", id: 5, parentId: 4 },
    { name: "children", id: 6, parentId: 4 }
]

到目前为止,我还没有能够实现这个问题的逻辑。对此问题的任何帮助将不胜感激。

提前致谢!

您需要遍历数组并存储最后一次遇到的父 ID,以便能够将其应用于每个后续子项

const data = [
    { name: "parent", id: 1 },
    { name: "children", id: 2 },
    { name: "children", id: 3 },
    { name: "parent", id: 4 },
    { name: "children", id: 5 }
]

let lastParentId = null
data.forEach(el => {
  if (el.name === "parent") {
    lastParentId = el.id
  } else {
    el.parentId = lastParentId
  }
})

console.log(data)

这是一个使用地图的可重用解决方案:

const data = [{ name: "parent", id: 1 }, { name: "children", id: 2 }, { name: "children", id: 3 }, { name: "parent", id: 4 }, { name: "children", id: 5 }]

function map(data) {
  let lastId
  return data.map(e => {
    if (e.name === "parent") lastId = e.id
    if (e.name === "children") e.parentId = lastId
    return e
  })
}

console.info(map(data))

迭代 array,存储 name 项的 parent id 等于 parent,设置 parent id 的子项 属性

const test = [
        { name: "parent", id: 1 },
        { name: "children", id: 2 },
        { name: "children", id: 3 },
        { name: "parent", id: 4 },
        { name: "children", id: 5 }
    ];

    let parentId = null; 
    for(let i = 0; i < test.length; i++){
        if(test[i].name === "parent") { 
            parentId = test[i].id; 
        } else { 
            test[i].parentid = parentId; 
        }    
    }
    
    console.log(test);

您可以存储来自最后一个父对象的 parentId 并映射具有该属性或不具有该属性的对象的新对象。

const
    data = [{ name: "parent", id: 1 }, { name: "children", id: 2 }, { name: "children", id: 3 }, { name: "parent", id: 4 }, { name: "children", id: 5 }],
    result = data.map((parentId => o => {
        if (o.name === 'parent') {
            parentId = o.id;
            return o;
        }        
        return { ...o, parentId };
    })());

console.log(result);

您可以使用 Array.map 遍历数据并检查对象中的 name 是否为 parent 如果是,则将 id 存储在变量中 return同一个对象。否则,将存储到对象的 id 添加为 parentId

let data = [{name:"parent",id:1},{name:"children",id:2},{name:"children",id:3},{name:"parent",id:4},{name:"children",id:5}]

const processData = (data) => {
  let parentId = "";
  return data.map(d => {
    if(d.name === "parent") {
      parentId = d.id;
    } else {
      d.parentId = parentId
    }
    return d;
  })
}

console.log(processData(data))
.as-console-wrapper {
  max-height: 100% !important;
}