我想在所有对象中将active元素设置为false。这是我的目标:
const obj =
{ name: 'obj1'
, ative: true
, children:
[ { name: 'obj2'
, ative: true
, children:
[ { name: 'Obj23'
, ative: true
, children: [...]
} ] }
, { name: 'obj3'
, children:
[ { name: 'Obj32'
, ative: true
, children: [...]
} ] }
, ...
}
我需要做的是,对于主对象obj1
和所有的子对象,以及子子对象。
我想将active
设置为false
。
关键是,我不知道每个孩子下面能有多少个孩子。我将不得不创建某种类型的循环与map
或类似的东西。
我需要停止循环时,孩子等于0(没有长度)
编辑:所有的解决方案都很棒。谢谢
3条答案
按热度按时间5lhxktic1#
您也可以使用
JSON.parse
和reviver function
来执行此操作:jxct1oxe2#
可以使用两种主要方法
1.迭代法
1.递归方法
在大多数情况下,迭代方法在内存和速度上都更好,因为递归方法需要
O(n)
额外内存来用于调用堆栈中的每个调用。在迭代方法中,
map
和forEach
数组方法将是无用的,因为我们不知道长度和何时停止,即使设法使用它们,也需要我们改变遍历的数组,这会导致副作用。相反,我们将使用一个简单的while
循环。算法:
active
设置为false
实施:
首先,让我们为输入数据结构创建一个类型:
现在,函数本身:
playground
ovfsdjhp3#
我并不反对wonderflame的观点,如果你不知道你的树会增长到多大,基于堆栈的方法更好,但是如果你知道你只会深入几层,那么优化可能就不需要了,递归方法更简单。