Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/431.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 遍历树状数组_Javascript_Arrays_Recursion_Tree - Fatal编程技术网

Javascript 遍历树状数组

Javascript 遍历树状数组,javascript,arrays,recursion,tree,Javascript,Arrays,Recursion,Tree,我有一个看起来像树结构的数组。这是一个对象数组,其中对象有一个子对象数组,子对象还有一个子对象数组。下面是一个例子。我曾尝试在这个问题中使用递归,但没有得到预期的结果 [ { parentId: null, children: [ { parentId: 267, children: [ { parentId: 268, chil

我有一个看起来像树结构的数组。这是一个对象数组,其中对象有一个子对象数组,子对象还有一个子对象数组。下面是一个例子。我曾尝试在这个问题中使用递归,但没有得到预期的结果

[
    {
      parentId: null,
      children: [
        {
          parentId: 267,
          children: [
            {
              parentId: 268,
              children: [
                {
                  parentId: 270,
                  children: null,
                }
              ],
            },
            {
              parentId: 268,
              children: [
                {
                  parentId: 269,
                  children: null,
                }
              ],
            }
          ],
        }
      ],
    },
   ...
   ...
  ];
我想遍历这个数组,并在每个对象中添加一个键和一个值

例如open:“fa-fa-open”

结果数组中的每个对象都必须具有上述键。

let数据=[
{
家长编号:123,
儿童:[],
},
{
家长编号:345,
儿童:[],
},
{
家长编号:1567,
儿童:[],
},
];
data.forEach(item=>item.open=“新值”)
console.log(数据)
let数据=[
{
家长编号:123,
儿童:[],
},
{
家长编号:345,
儿童:[],
},
{
家长编号:1567,
儿童:[],
},
];
data.forEach(item=>item.open=“新值”)
console.log(数据)
请查看下面链接中的代码,它递归遍历所有子项并插入open:'fa fa open'

请看下面链接中的代码,它递归遍历所有子项并插入open:“fa fa open”

您可以使用
forEach
循环创建递归函数,该循环获取数据和对象,并将该对象分配给数据中的每个对象

const data=[{“parentId”:null,“children”:[{“parentId”:267,“children”:[{“parentId”:268,“children”:[{“parentId”:270,“children”:null}]},{“parentId”:268,“children”:[{“parentId”:269,“children”:null}]}]
功能添加(数据,obj){
data.forEach(e=>{
分配对象(e、obj);
如果(e.儿童)添加(e.儿童,obj)
})
}
添加(数据,{open:'fa-fa-open'})

console.log(data)
您可以使用
forEach
循环创建递归函数,该循环获取数据和对象,并将该对象分配给数据中的每个对象

const data=[{“parentId”:null,“children”:[{“parentId”:267,“children”:[{“parentId”:268,“children”:[{“parentId”:270,“children”:null}]},{“parentId”:268,“children”:[{“parentId”:269,“children”:null}]}]
功能添加(数据,obj){
data.forEach(e=>{
分配对象(e、obj);
如果(e.儿童)添加(e.儿童,obj)
})
}
添加(数据,{open:'fa-fa-open'})

console.log(data)
这类问题非常适合了解相互递归

首先,我们使用一个高阶函数
f
遍历单个
节点
及其子节点

const traverse = (f, { children = [], ...node }) =>
  f ({ ...node, children: children.map (c => traverse (f, c)) })
例如,将属性
hello
设置为
'world'
添加到每个节点-

traverse
  ( node => ({ ...node, hello: 'world' })
  , { a: 1, children: [ { b: 2 } ] }
  )

// { a: 1
// , children:
//     [ { b: 2
//       , children: []
//       , hello: 'world'
//       }
//     ]
//  }
但这只适用于单个节点。您有一个节点数组,因此——

const traverseAll = (f, nodes = []) =>
  nodes.map (node => traverse (f, node))
当您回顾
遍历
时,我们看到我们重复了我们自己(用粗体


这类问题非常适合学习相互递归

首先,我们使用一个高阶函数
f
遍历单个
节点
及其子节点

const traverse = (f, { children = [], ...node }) =>
  f ({ ...node, children: children.map (c => traverse (f, c)) })
例如,将属性
hello
设置为
'world'
添加到每个节点-

traverse
  ( node => ({ ...node, hello: 'world' })
  , { a: 1, children: [ { b: 2 } ] }
  )

// { a: 1
// , children:
//     [ { b: 2
//       , children: []
//       , hello: 'world'
//       }
//     ]
//  }
但这只适用于单个节点。您有一个节点数组,因此——

const traverseAll = (f, nodes = []) =>
  nodes.map (node => traverse (f, node))
当您回顾
遍历
时,我们看到我们重复了我们自己(用粗体


此代码只能对平面阵列执行。问题是关于嵌套的。e、 孩子们会有像树结构一样的孩子。我误解了这个问题。这个代码只能用于平面数组。问题是关于嵌套的。e、 g子对象将具有类似于树结构的子对象。我误解了这个问题。是要获取新数组,还是只将属性插入现有数组和子对象?插入现有数组。我也无法复制此数组,因为弹出了一些循环json错误。您是要获取新数组还是只将属性插入现有数组和子数组?插入现有数组。我也无法复制这个数组,因为弹出了一些循环json错误。如果parentid为given@RenilBabu是的,您可以将parentId作为参数传递给函数,并在添加openkey的位置将其设置为条件。但我认为这将只是一个级别。我需要给定parentid的所有孩子和其他孩子不要打开fa fa如果parentid为given@RenilBabu是的,您可以将parentId作为参数传递给函数,并且在添加openkey的位置将其设置为条件。但我认为它将是唯一的一个参数水平。我需要给定父母ID的所有孩子和其他孩子不要打开fa fa