
本文讲解如何利用 JavaScript 的 map() 方法,根据数组中每个对象的年龄属性动态生成对应的提示字符串,并修正常见返回 undefined 的逻辑错误。
本文讲解如何利用 javascript 的 `map()` 方法,根据数组中每个对象的年龄属性动态生成对应的提示字符串,并修正常见返回 `undefined` 的逻辑错误。
在处理对象数组并需要为每个元素生成新值时,Array.prototype.map() 是最自然、最函数式的选择。但一个常见误区是:在箭头函数中使用花括号 {} 却忘记显式 return——这将导致回调函数隐式返回 undefined,最终整个 map() 结果为 [undefined, undefined, ...]。
回顾原始代码问题:
const map1 = arr.map((person) => {
if (person.age > 18) {
person.name + " can go to The Matrix"; // ❌ 无 return,表达式结果被丢弃
} else {
person.name + "is underage!!"; // ❌ 同样无 return
}
});
✅ 正确写法有两种等效形式:
方式一:使用隐式返回(省略花括号)
function makeStrings(arr) {
return arr.map(person =>
person.age >= 18
? `${person.name} can go to The Matrix`
: `${person.name} is under age!!`
);
}
方式二:使用显式 return(保留花括号)
function makeStrings(arr) {
return arr.map(person => {
if (person.age >= 18) {
return `${person.name} can go to The Matrix`; // ✅ 必须加 return
} else {
return `${person.name} is under age!!`; // ✅ 必须加 return
}
});
}
⚠️ 注意事项:
- 条件判断中建议使用 >= 18 而非 > 18,因题目示例中 age: 100 和 80 均返回“can go”,且 18 岁通常视为成年临界点;
- 字符串拼接推荐使用模板字面量(反引号 `${...}`),语义清晰、可读性强;
- map() 是纯函数,不修改原数组,始终返回一个等长新数组,符合函数式编程原则。
完整可运行示例:
function makeStrings(arr) {
return arr.map(person =>
person.age >= 18
? `${person.name} can go to The Matrix`
: `${person.name} is under age!!`
);
}
console.log(makeStrings([
{ name: "Angelina Jolie", age: 80 },
{ name: "Eric Jones", age: 2 },
{ name: "Paris Hilton", age: 5 },
{ name: "Kayne West", age: 16 },
{ name: "Bob Ziroll", age: 100 }
]));
// 输出:
// [
// "Angelina Jolie can go to The Matrix",
// "Eric Jones is under age!!",
// "Paris Hilton is under age!!",
// "Kayne West is under age!!",
// "Bob Ziroll can go to The Matrix"
// ]
总结:map() 的核心在于「输入一项 → 显式返回一项」。只要确保每个分支都有明确返回值,就能安全、简洁地完成数据转换任务。











