You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 18:06:25