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

JS中array.map()未返回单个合并数组,求排查问题

问题分析与解决方案

嘿,我来帮你捋捋问题出在哪~

你现在的代码之所以会输出两个独立的数组,是因为每次循环arrayVal的子元素时,都创建了一个新的result数组,然后直接打印它。相当于每次循环都输出当前子元素对应的id数组,自然会得到两个分开的结果。

要把所有id合并成单个数组,只需要把每次循环得到的id收集到同一个数组里就行,这里给你几种可行的方案:

方案1:修改现有循环逻辑

先在循环外部声明一个空数组,每次循环把当前子元素的id添加进去:

const arrayVal = [{ sources: { data: [{ id: 1 }] } }, { sources: { data: [{ id: 2 }] } } ];
// 在外层声明统一的结果数组
let result = [];
for (let sub of arrayVal) {
  // 用展开运算符把map得到的id元素逐个加入result
  result.push(...sub.sources.data.map(x => x.id));
}
console.log(result); // 输出: [1, 2]

方案2:用flatMap简化代码(推荐)

数组的flatMap方法会先对每个元素执行map操作,再自动将结果扁平化一层,完美匹配你的需求:

const arrayVal = [{ sources: { data: [{ id: 1 }] } }, { sources: { data: [{ id: 2 }] } } ];
const result = arrayVal.flatMap(sub => sub.sources.data.map(x => x.id));
console.log(result); // 输出: [1, 2]

方案3:先map再扁平化

如果更习惯分步操作,也可以先通过map得到二维数组,再用flat()方法扁平化:

const arrayVal = [{ sources: { data: [{ id: 1 }] } }, { sources: { data: [{ id: 2 }] } } ];
const result = arrayVal.map(sub => sub.sources.data.map(x => x.id)).flat();
console.log(result); // 输出: [1, 2]

核心思路就是不要每次循环都生成独立数组,而是把所有id收集到同一个容器里,这样就能得到你想要的单个数组啦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:36:08