如何添加子对象的值并将其推送到相应的父对象

时间:2019-07-09 10:40:38

标签: javascript arrays lodash

我具有如下的json结构

  

[{“名称”:“ minpur”,“孩子”:[{             “ name”:“ ppp1”,             “儿童”:[{                 “ name”:“ feeder”,                 “儿童”:[{                     “ name”:“ rmu16”,                     “儿童”:[{                         “ name”:“ invt16”,                         “儿童”:[{                             “ aname”:“ inv 01”,                             “值”:300                         },{                             “ aname”:“ inv 03”,                             “值”:500                         }]                     }]                 }]             }]}]}]

我想添加子对象的值并推送到相应的父对象 像下面一样

  

[{“ name”:“ minpur”,“ value”:800,“ children”:[{“ name”:“ ppp1”,         “值”:800,“子级”:[{“名称”:“馈线”,“值”:800,             “儿童”:[{                 “ name”:“ rmu16”,                 “值”:800,                 “儿童”:[{                     “ name”:“ invt16”,                     “值”:800,                     “儿童”:[{                         “ aname”:“ inv 01”,                         “值”:300                     },{                         “ aname”:“ inv 03”,                         “值”:500                     }]                 }]}]}]}]}]

1 个答案:

答案 0 :(得分:1)

您可以创建一个递归函数来迭代子级,并根据其子级添加值,等等。

注意:示例中的value属性出现在children属性之后。

const fn = arr => arr.map(o => {
  if(!o.children) return o
  
  const children = fn(o.children)
  const value = (o.value || 0) + children.reduce((r, { value }) => r + value, 0)
  
  return {
    ...o,
    value,
    children
  }
})

const data = [{"name":"minpur","children":[{"name":"ppp1","children":[{"name":"feeder","children":[{"name":"rmu16","children":[{"name":"invt16","children":[{"aname":"inv 01","value":300},{"aname":"inv 03","value":500}]}]}]}]}]}]

const result = fn(data)

console.log(result)