JavaScript如何过滤移除嵌套数组中对象类型的元素
需求说明
处理对象数组格式的数据集,移除每个对象下userDetails嵌套数组中的所有对象类型元素,仅保留数字、字符串等非对象基础类型值。
实现思路
- 遍历外层数组的每一个元素对象
- 对每个对象内的
userDetails数组执行过滤逻辑,剔除对象类型的元素 - 可选择生成新的结果数组(不修改原数据,无副作用),或直接修改原数组
代码实现
推荐写法(不修改原始数据,无副作用)
const data = [{"userDetails":[{"username":"Sai ","profileUrl":"","_id":4},{"username":"Mohamed Abu","profileUrl":"","_id":1},4,1]},{"userDetails":[{"username":"Sai ","profileUrl":"","_id":1},4,1]},{"userDetails":[{"username":"Sai ","profileUrl":"","_id":4},4]},{"userDetails":[{"username":"Mohamed Abu","profileUrl":"","_id":1},1]}] const processedData = data.map(item => ({ ...item, userDetails: item.userDetails.filter(val => { // 注意typeof null === 'object'的边界,这里保留null,如果不需要可以去掉|| val === null return typeof val !== 'object' || val === null }) }))
运行后输出和期望结果完全一致:
[ { userDetails: [4, 1] }, { userDetails: [4, 1] }, { userDetails: [4] }, { userDetails: [1] } ]
直接修改原数据写法(适合不需要保留原数据的场景)
data.forEach(item => { item.userDetails = item.userDetails.filter(val => typeof val !== 'object' || val === null) })
注意事项
- 如果业务场景不需要保留
null值,把过滤条件里的|| val === null删除即可 - 上述判断逻辑会自动保留数字、字符串、布尔值、
undefined、Symbol等所有非对象类型的基础值,符合通用需求
内容的提问来源于stack exchange,提问作者Sri Charan
相关产品推荐
相关产品推荐

