【问题标题】:How to apply same id as parent to children array in the same level?如何将与父级相同的 id 应用于同一级别的子级数组?
【发布时间】:2020-09-23 14:23:57
【问题描述】:

我有以下对象

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

如您所见,父母和孩子都处于同一级别。我需要做的是将子级与父级连接起来,将父级 ID 应用于具有新属性的子级数组。像这样的:

[
    { 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 }
]

到目前为止,我还无法实现此问题的逻辑。对此问题的任何帮助将不胜感激。

提前致谢!

【问题讨论】:

  • 你只有一层吗?你试过什么?

标签: javascript arrays loops object logic


【解决方案1】:

您需要遍历您的数组并存储最后一次输入的父 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)

【讨论】:

  • 答案都很好,但是这个是第一个出现的。谢谢大家!成功了!
  • @JosePeres 如果您想对提供解决方案的人表示感谢,您仍然可以投票支持其他答案。
【解决方案2】:

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

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))

【讨论】:

    【解决方案3】:

    您可以存储来自最后一个父级的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);

    【讨论】:

      【解决方案4】:

      您可以使用Array.map 遍历数据并检查对象中的name 是否为parent,如果是,则将id 存储在一个变量中,返回相同的对象。否则,将存储到对象的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;
      }

      【讨论】:

        【解决方案5】:

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

        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);

        【讨论】:

          猜你喜欢
          • 2022-11-11
          • 1970-01-01
          • 2017-09-02
          • 2014-11-15
          • 2019-01-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多