本文详解如何正确遍历含嵌套数组的对象数组,解决 map 嵌套使用导致返回二维数组、变量作用域错误及逻辑中断等问题,并提供 flat()、flatMap()、forEach 等多种现代 JavaScript 方案。
本文详解如何正确遍历含嵌套数组的对象数组,解决 `map` 嵌套使用导致返回二维数组、变量作用域错误及逻辑中断等问题,并提供 `flat()`、`flatmap()`、`foreach` 等多种现代 javascript 方案。
在处理类似 people 这样的数据结构时——即一个对象数组,每个对象又包含一个字符串数组(如 jobs)——开发者常希望通过一次操作获取所有 job 的扁平化列表(如 ["waiter", "doctor", "singer", "actor", "nurse", "actor"])。但初学者容易陷入两个典型误区:
下面给出几种专业、简洁、可维护的解决方案:
const people = [ { name: "mike", jobs: ["waiter", "doctor"] }, { name: "nils", jobs: ["singer", "actor"] }, { name: "nils", jobs: ["nurse", "actor"] }];const allJobs = people.flatMap(person => person.jobs);console.log(allJobs); // → ["waiter", "doctor", "singer", "actor", "nurse", "actor"]
flatMap() = map() + flat(1),天然适用于“映射并展平一级”的场景,代码简洁且意图明确。
const allJobs = people.map(p => p.jobs).flat();
const allJobs = people.reduce((acc, person) => [...acc, ...person.jobs], []);
const allJobs = [];people.forEach(person => { person.jobs.forEach(job => allJobs.push(job));});
掌握这些方法,你不仅能正确提取嵌套值,更能写出更健壮、更易读的数据处理逻辑。