You need to enable JavaScript to run this app. JavaScript:如何从对象数组提取status嵌套数组的去重值
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript:如何从对象数组提取status嵌套数组的去重值

代码修正方案

你之前的代码存在两个核心问题,导致结果不符合预期:

  • 字段名笔误:数据对象中存储状态的字段为status,原代码解构时写的是不存在的deviceTags字段;即使修正为正确的字段名,也依然会得到错误结果
  • 去重逻辑错位、缺少数组拍平步骤:仅通过map遍历拿到每个元素对应的status子数组,未将所有子数组合并为一维数组就直接传入Set去重。由于数组是引用类型,Set只会判断数组引用的唯一性,不会对比数组内部的字符串值,因此既无法合并嵌套结构,也无法对内容相同的状态做去重,最终就会得到你贴出的全量嵌套数组结果。

可直接使用的正确实现

简洁写法(支持现代浏览器/Node.js 11+环境)

直接使用flatMap方法替代map,自动完成一层数组拍平,再做值层面的去重:

const uniqueStatus = [...new Set(data.flatMap(({ status }) => status))]

代码执行逻辑:

  1. flatMap遍历每一个数据项,取出对应status数组,自动将所有分散的子数组合并为包含全量状态值的一维数组
  2. 将合并后的一维数组传入Set,对数组内的字符串值做去重
  3. 通过展开运算符将Set转回普通数组,最终得到无重复的一维状态集合

针对你给出的样本数据,上述代码运行后会直接输出目标结果:
['online', 'idle', 'network-error', 'offline', 'inoperative']

低版本环境兼容写法

如果需要适配不支持flatMap的老旧运行环境,可以用reduce手动完成数组拼接:

const uniqueStatus = [...new Set(
  data.reduce((allStatus, currentItem) => allStatus.concat(currentItem.status), [])
)]

内容的提问来源于stack exchange,提问作者Hayrettin Basaraner

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.01 07:45:06