gpt4 book ai didi

javascript - 如何使用递归方法从数组中删除隐藏元素

转载 作者:行者123 更新时间:2023-11-30 16:43:35 25 4
gpt4 key购买 nike

我正在使用树结构来显示未隐藏的类型。为此,我正在删除 hidden = true 工作正常的类型

var filtertypes = function (types) {
for (var i = 0, l = types.length; i < l; i++) {
var type = types[i];
if (type && !type.hidden) {
if (type.text) {
type.n = type.text
type.id = type.id;
}
if (type.children) {
filtertypes(type.children);
}
} else {
types.splice(i, 1);
filtertypes(types);
}
}
return types;
};

但由于这不利于编辑数据(即类型),所以现在我想创建一个仅包含非隐藏值的新数组。所以我想要一个函数,我为其提供一个 types 作为数据,它返回所有未隐藏的类型。

注意:- 类型结构如下

1    11    111
12 121
13
2 21 211
212
22 221
222
3 31 311
312
32 321
322

假设隐藏了13、121、21、31、32我应该得到如下输出

[1,2,3]

Where 1.children should be should get [11, 12] #as 13 is hidden
11.children should be [111]
12.children should be nil #as 121 is hidden
3.children should be nil #as 31, 32 are hidden

最佳答案

您必须在之前修改原始数组和对象的每个地方创建新的数组和对象:

var filtertypes = function (types) {
var newTypes = [];
for (var i = 0, l = types.length; i < l; i++) {
var type = types[i];
if (type && !type.hidden) {
var newType = extend({}, type); //replace extend with Object.assign, angular.extend or similar
if (type.children) {
newType.children = filtertypes(type.children);
}
newTypes.push(newType);
}
}
return newTypes;
};

您还可以查看不可变数据结构,immutable.js ,这可能会有所帮助。

关于javascript - 如何使用递归方法从数组中删除隐藏元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31562135/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com