从层级对象数组中移除structure属性为undefined的对象
移除层级对象数组中
structure为undefined的元素 你需要处理一个嵌套的对象数组,移除所有structure属性值为undefined的对象——不管是顶层无子女的匹配对象,还是嵌套在子层级里的,对吧?这里有个简洁的递归方案可以解决这个问题:
首先先看你的原始数组:
var a = [ { value: 'Some data', structure: 'linear', id: 0, children: [ { id: 1, value: 'Some data', structure: undefined }, { id: 2, value: 'Some data', structure: 'linear', children: [ { id: 4, value: 'Some data', structure: undefined } ] } ] }, { id: 5, structure: undefined, value: 'Some data' } ];
方案1:直接过滤(会修改原对象)
这个方法用递归遍历数组,筛选出符合条件的元素,同时处理子层级:
function filterUndefinedStructure(arr) { return arr.filter(item => { // 直接排除structure为undefined的元素 if (item.structure === undefined) { return false; } // 如果有子元素,递归处理子数组 if (item.children) { item.children = filterUndefinedStructure(item.children); } return true; }); } // 调用函数得到结果 const filteredArray = filterUndefinedStructure(a); console.log(filteredArray);
方案2:无副作用版本(不修改原数组/对象)
如果你不想改动原始数据,可以用reduce来构建全新的数组和对象,避免副作用:
function filterUndefinedStructure(arr) { return arr.reduce((result, currentItem) => { // 跳过structure为undefined的元素 if (currentItem.structure === undefined) { return result; } // 拷贝当前元素,避免修改原对象 const newItem = { ...currentItem }; // 递归处理子元素(如果有的话) if (newItem.children) { newItem.children = filterUndefinedStructure(newItem.children); } // 将处理后的元素加入结果数组 result.push(newItem); return result; }, []); } const filteredArray = filterUndefinedStructure(a); console.log(filteredArray);
结果说明
两种方案处理后,最终的数组都会是这样的:
[ { value: 'Some data', structure: 'linear', id: 0, children: [ { id: 2, value: 'Some data', structure: 'linear', children: [] } ] } ]
- 顶层的id5元素因为
structure是undefined被移除 - 子层级里的id1元素同样被移除
- id2的子元素id4也被过滤掉,所以id2的
children变成空数组
内容的提问来源于stack exchange,提问作者Sanjita
相关产品推荐
相关产品推荐

