【问题标题】:Updated new key value pair at every child level in array of object在对象数组的每个子级别更新新的键值对
【发布时间】:2023-01-25 21:23:11
【问题描述】:

我有一组对象,我想在每个嵌套的子级别更新值我无法找到如何实现它

输入

let data = [{
    label: 'classA',
    value: 40,
    children: [{
        label: 'classA_sectioA',
        value: 12,
        children: [{
            label: 'classA_sectioA_student1',
            value: 7,
          },
          {
            label: 'classA_sectioA_student2',
            value: 3,
          },
          {
            label: 'classA_sectioA_student3',
            value: 2,
          }
        ]
      },
      {
        label: 'classA_sectioB',
        value: 15,
        children: [{
            label: 'classA_sectioB_student1',
            value: 7,
          },
          {
            label: 'classA_sectioB_student2',
            value: 3,
          },
          {
            label: 'classA_sectioB_student3',
            value: 5,
          }
        ],
      },
      {
        label: 'classA_sectioC',
        value: 13,
        children: [{
            label: 'classA_sectioC_student1',
            value: 6,
          },
          {
            label: 'classA_sectioC_student2',
            value: 3,
          },
          {
            label: 'classA_sectioC_student3',
            value: 4,
          }
        ]
      }
    ]
  },
  {
    label: 'classB',
    value: 60,
    children: [{
        label: 'classB_sectioA',
        value: 12,
        children: [{
            label: 'classB_sectioA_student1',
            value: 6,
          },
          {
            label: 'classB_sectioA_student2',
            value: 5,
          },
          {
            label: 'classB_sectioA_student3',
            value: 1,
          }
        ]
      },
      {
        label: 'classB_sectioB',
        value: 18,
        children: [{
            label: 'classB_sectioB_student1',
            value: 3,
          },
          {
            label: 'classB_sectioB_student2',
            value: 13,
          },
          {
            label: 'classB_sectioB_student3',
            value: 2,
          }
        ],
      },
      {
        label: 'classB_sectioC',
        value: 30,
        children: [{
            label: 'classB_sectioC_student1',
            value: 1,
          },
          {
            label: 'classB_sectioC_student2',
            value: 9,
            children: [{
                label: 'shan',
                value: 4,
              },
              {
                label: 'sk',
                value: 2,
              },
              {
                label: 'tk',
                value: 2,
              }
            ]
          },
          {
            label: 'classB_sectioC_student3',
            value: 20,
          }
        ]
      }
    ]
  },
  {
    label: 'classC',
    value: 90,
    children: [{
        label: 'classC_sectioA',
        value: 30,
        children: [{
            label: 'classC_sectioA_student1',
            value: 11,
          },
          {
            label: 'classC_sectioA_student2',
            value: 12,
          },
          {
            label: 'classC_sectioA_student3',
            value: 7,
          }
        ]
      },
      {
        label: 'classC_sectioB',
        value: 20,
        children: [{
            label: 'classC_sectioB_student1',
            value: 1,
          },
          {
            label: 'classC_sectioB_student2',
            value: 16,
          },
          {
            label: 'classC_sectioB_student3',
            value: 13,
          }
        ],
      },
      {
        label: 'classC_sectioC',
        value: 40,
        children: [{
            label: 'classC_sectioC_student1',
            value: 21,
            children: [{
                label: 'shanu',
                value: 22,
                >
                label: 'sk',
                value: 18,
              },
              {
                label: 'tk',
                value: 11,
              }
            ]
          },
          {
            label: 'classC_sectioC_student2',
            value: 12,
          },
          {
            label: 'classC_sectioC_student3',
            value: 7,
          }
        ]
      }
    ]
  }
]

异常输出

let data = [{
    label: 'classA',
    value: 40,
    Radius: 20
    children: [{
        label: 'classA_sectioA',
        value: 12,
        Radius: 40
        children: [{
            label: 'classA_sectioA_student1',
            value: 7,
          },
          {
            label: 'classA_sectioA_student2',
            value: 3,
          },
          {
            label: 'classA_sectioA_student3',
            value: 2,
          }
        ]
      },
      {
        label: 'classA_sectioB',
        value: 15,
        Radius: 40
        children: [{
            label: 'classA_sectioB_student1',
            value: 7,
            Radius: 60
          },
          {
            label: 'classA_sectioB_student2',
            value: 3,
            Radius: 60
          },
          {
            label: 'classA_sectioB_student3',
            value: 5,
            Radius: 60
          }
        ],
      },
      {
        label: 'classA_sectioC',
        value: 13,
        Radius: 40
        children: [{
            label: 'classA_sectioC_student1',
            value: 6,
            Radius: 60
          },
          {
            label: 'classA_sectioC_student2',
            value: 3,
            Radius: 60
          },
          {
            label: 'classA_sectioC_student3',
            value: 4,
            Radius: 60
          }
        ]
      }
    ]
  },
  {
    label: 'classB',
    value: 60,
    Radius: 20
    children: [{
        label: 'classB_sectioA',
        value: 12,
        Radius: 40
        children: [{
            label: 'classB_sectioA_student1',
            value: 6,
            Radius: 60
          },
          {
            label: 'classB_sectioA_student2',
            value: 5,
            Radius: 60
          },
          {
            label: 'classB_sectioA_student3',
            value: 1,
            Radius: 60
          }
        ]
      },
      {
        label: 'classB_sectioB',
        value: 18,
        Radius: 40
        children: [{
            label: 'classB_sectioB_student1',
            value: 3,
            Radius: 60
          },
          {
            label: 'classB_sectioB_student2',
            Radius: 60
            value: 13,
          },
          {
            label: 'classB_sectioB_student3',
            value: 2,
            Radius: 60
          }
        ],
      },
      {
        label: 'classB_sectioC',
        value: 30,
        Radius: 40
        children: [{
            label: 'classB_sectioC_student1',
            value: 1,
            Radius: 60
          },
          {
            label: 'classB_sectioC_student2',
            Radius: 60
            value: 9,
            children: [{
                label: 'shan',
                value: 4,
                Radius: 80
              },
              {
                label: 'sk',
                value: 2,
                Radius: 80
              },
              {
                label: 'tk',
                value: 2,
                Radius: 80
              }
            ]
          },
          {
            label: 'classB_sectioC_student3',
            value: 20,
            Radius: 60
          }
        ]
      }
    ]
  },
  {
    label: 'classC',
    value: 90,
    Radius: 20
    children: [{
        label: 'classC_sectioA',
        value: 30,
        Radius: 40
        children: [{
            label: 'classC_sectioA_student1',
            value: 11,
            Radius: 60
          },
          {
            label: 'classC_sectioA_student2',
            value: 12,
            Radius: 60
          },
          {
            label: 'classC_sectioA_student3',
            value: 7,
            Radius: 60
          }
        ]
      },
      {
        label: 'classC_sectioB',
        value: 20,
        Radius: 40
        children: [{
            label: 'classC_sectioB_student1',
            value: 1,
            Radius: 60
          },
          {
            label: 'classC_sectioB_student2',
            value: 16,
            Radius: 60
          },
          {
            label: 'classC_sectioB_student3',
            value: 13,
            Radius: 60
          }
        ],
      },
      {
        label: 'classC_sectioC',
        value: 40,
        Radius: 40
        children: [{
            label: 'classC_sectioC_student1',
            Radius: 60
            value: 21,
            children: [{
                label: 'shanu',
                value: 22,
                Radius: 80
              },
              {
                label: 'sk',
                value: 18,
                Radius: 80
              },
              {
                label: 'tk',
                value: 11,
                Radius: 80
              }
            ]
          },
          {
            label: 'classC_sectioC_student2',
            value: 12,
            Radius: 60
          },
          {
            label: 'classC_sectioC_student3',
            value: 7,
            Radius: 60
          }
        ]
      }
    ]
  }
]

//a new property radius added at every level and it's multiply by 20 with there levels of depth

我尝试用递归函数更新对象,但在某个级别之后我不知道如何递归地执行此操作,因为我必须在每个级别上保持索引,这对我来说是痛点

【问题讨论】:

  • 你有一些更紧凑的数据吗?
  • 上面给出的数据集是否有任何问题
  • 我有数据数组,只想在每个嵌套级别更新或添加半径

标签: javascript


【解决方案1】:

您可以用它们的半径映射新对象。

addRadius = Radius => ({ children, ...o }) => children
    ? { ...o, Radius, children: children.map(addRadius(Radius + 20)) }
    : { ...o, Radius };

data = data.map(addRadius(20));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-07-17
    • 2018-11-15
    • 1970-01-01
    • 1970-01-01
    • 2018-04-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多