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

使用Map+Filter筛选18岁以上人员并缩写姓名的实现问题

问题修正与解决方案

先直接说你代码里的核心问题:

  1. 数据结构完全错误:你把多人员列表写成了单个对象amantesGatos,但对象里重复的name/age键会被最后一组值覆盖,根本存不下多个人的信息,必须改成对象数组。
  2. 方法用错地方:map是数组专属方法,不能直接套在对象上,这会直接抛出错误。
  3. 筛选逻辑跑偏且冗余:你写的above18函数绕了没必要的循环,而且操作的是一个和需求无关的数字数组,完全没用到人员数据。

正确实现步骤

  1. 把人员数据改成数组格式,每个元素是包含name和age的独立对象;
  2. 用filter筛选出年龄大于18的人员;
  3. 用map把符合条件的姓名截取前两个字符;
  4. 得到最终的缩写姓名数组。

修正后的代码

// 正确的人员数组结构
const amantesGatos = [
  { name: "Raul", age: 27 },
  { name: "Jose", age: 14 },
  { name: "Maria", age: 52 },
  { name: "Jesus", age: 17 },
  { name: "Neo", age: 2 }
];

// 筛选+转换一步完成
const result = amantesGatos
  .filter(person => person.age > 18) // 挑出年龄超18的人
  .map(person => person.name.slice(0, 2)); // 截取姓名前两位

console.log(result); // 输出: ["Ra", "Ma"]

额外补充

如果遇到姓名长度不足2位的情况(比如单字名),可以加个兜底处理避免异常:person.name.slice(0, 2).padEnd(2, ''),不过你的示例里没有这种场景,按需添加即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 11:25:15