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

如何从JavaScript对象数组的指定属性中提取元素并生成新数组

提取所有zones元素到新数组的解决方案

没问题,这个需求很容易实现,我给你分两种场景来写代码:

一、保留重复元素的版本

如果你需要保留所有重复的zones值,用flatMap是最简洁的方式,它能同时完成映射和数组扁平化的操作,还能处理没有zones属性或者zones为空数组的对象:

const array = [ 
  {userId: 'P282', zones: ['188']}, 
  {userId: 'P277', zones: []}, 
  {userId: 'P280'}, 
  {userId: 'P281'}, 
  {userId: 'P279'}, 
  {userId: 'U57', zones: ['190', '189', '188']}, 
];

const zonesWithDuplicates = array.flatMap(obj => obj.zones || []);
console.log(zonesWithDuplicates); // 输出: ['188', '190', '189', '188']

这里的obj.zones || []是关键:如果对象没有zones属性,或者zones是undefined,就用空数组代替,避免把undefined当成元素混入结果里。

二、去除重复元素的版本

如果需要得到去重后的zones数组,只需要在上面的基础上结合Set(它会自动过滤重复值),再把Set转回数组即可:

const uniqueZones = [...new Set(array.flatMap(obj => obj.zones || []))];
console.log(uniqueZones); // 输出: ['188', '190', '189']

兼容旧环境的替代方案

如果你的项目需要兼容不支持flatMap的旧浏览器,也可以用reduce来实现:

// 保留重复的兼容写法
const zonesWithDuplicatesReduce = array.reduce((result, obj) => {
  return result.concat(obj.zones || []);
}, []);

// 去重的兼容写法
const uniqueZonesReduce = [...new Set(array.reduce((result, obj) => {
  return result.concat(obj.zones || []);
}, []))];

这样不管有没有zones属性、数组是空还是有值,都能完美处理啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 15:39:11