用map提取对象数组某属性生成扁平数组,核心是传入返回该属性值的函数:如users.map(user => user.name)得['Alice','Bob','Charlie'];可选链、默认值或条件判断可处理undefined;支持嵌套属性、字段组合与类型转换;map返回等长数组,过滤需配合filter,多值展开需用flatMap。

用 map 提取对象数组中某个属性,生成扁平数组,核心就是传入一个返回该属性值的函数。
基础写法:直接返回属性值
假设你有如下数据:
const users = [{ name: 'Alice', age: 25 }, { name: 'Bob', age: 30 }, { name: 'Charlie', age: 28 }];想提取所有 name,只需:
// → ['Alice', 'Bob', 'Charlie']
箭头函数里直接访问对象属性,map 自动收集每个返回值,组成新数组。
处理可能为 undefined 的属性
如果某些对象缺少目标属性(比如 user.nickname 不存在),直接 user.nickname 会得到 undefined。可加安全访问:
- 用可选链操作符:
users.map(user => user.nickname?.toUpperCase()) - 或提供默认值:
users.map(user => user.nickname || '匿名') - 或先判断再取:
users.map(user => user.nickname ? user.nickname.trim() : '')
提取嵌套属性或做简单转换
map 回调里可以写任意合法表达式:
- 取深层属性:
data.map(item => item.profile.address.city) - 组合多个字段:
users.map(u => `${u.name} (${u.age})`) - 类型转换:
items.map(x => Number(x.id))或x.id.toString()
注意别和 filter、flatMap 混淆
map 一定返回等长数组;如果要过滤掉空值,得链式调用:
如果一个对象对应多个值(如 tags: ['a','b']),要用 flatMap 才能真正“扁平化”:
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











