warisFairy 2024-02-02 13:32 采纳率: 44.4%
浏览 4
已结题

请教怎么为数组中的的子级添加一个属性 属性是数组 内容是它的所有父级的value值


var arr = [
                {
                    name:'001',
                    value:'001',
                    children:[
                        {
                          name:'00101',
                          value:'00101',
                          children:[
                              {
                                  name:'0010101',
                                  value:'0010101',
                                  children:[.....]
                              },
                          ]
                        },{
                          name:'00102',
                          value:'00102',
                        },
                    ],
                },
                {name:'002',value:'002'},
                {name:'003',value:'003'},
            ]

怎么为数组中的的子级添加一个属性 属性是数组 内容是它的所有父级的value值
比如

                             {
                                  name:'0010101',
                                  value:'0010101',
                                  pValue:['001','00101']
                                  children:[.....]
                              },

  • 写回答

3条回答 默认 最新

  • 专家-赤兔[在线] 优质创作者: 编程框架技术领域 2024-02-02 13:33
    关注

    引自免费微信小程序:皆我百晓生

    当然,下面是一个JavaScript函数,它会遍历给定数组,并为每个节点添加一个名为pValue的新属性,其值为一个包含所有父级value的数组。

    function addParentValuesToNodes(arr) {
      function traverse(node, parents = []) {
        // 当前节点的所有父级value
        const parentValues = [...parents, node.value];
    
        // 添加或更新pValue属性
        if (!('pValue' in node)) {
          node.pValue = parentValues;
        } else {
          node.pValue = [...parentValues];
        }
    
        // 遍历子节点
        if (Array.isArray(node.children) && node.children.length > 0) {
          for (const child of node.children) {
            traverse(child, parentValues);
          }
        }
      }
    
      arr.forEach((item) => {
        if (item.children) {
          traverse(item);
        }
      });
    
      return arr;
    }
    
    // 使用上述函数处理你的数组
    var arr = [/*...你的原始数组内容...*/];
    var modifiedArr = addParentValuesToNodes(arr);
    
    console.log(modifiedArr);
    

    这个函数首先定义了一个内部递归函数traverse,它接受当前节点和一个包含当前节点路径上所有父级value的数组。对于每个节点,它都会创建一个新的pValue数组,并将其赋值给节点。然后,如果当前节点有子节点,则对每个子节点递归调用traverse函数,同时将当前节点的value加入到父级列表中。

    最后,我们通过遍历输入数组并调用traverse函数来应用此修改过程。处理完成后,返回的modifiedArr将是带有新增pValue属性的数组。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 2月10日
  • 已采纳回答 2月2日
  • 创建了问题 2月2日