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

JavaScript:比较普通数组与嵌套数组,提取匹配项value至新数组

问题描述

我有以下两个数组:

const arrayOne = [
 {id: '110'},
 {id: '202'},
 {id: '259'}
];

const arrayTwo = [
 {data: [{value: 'Alpha', id: '001'}]},
 {data: [{value: 'Bravo', id: '202'}]},
 {data: [{value: 'Charlie', id: '752'}]},
 {data: [{value: 'Delta', id: '202'}, {value: 'Sierra', id: '110'}]},
 {data: [{value: 'Echo', id: '937'}]}
];

需要创建一个新数组,将arrayOne里的id和arrayTwo中每个元素的data子数组里的id匹配,匹配成功就把对应的value放进新数组。示例期望结果是:

newArray = ['Bravo', 'Delta', 'Sierra']

我试了几段代码,但都没得到正确结果:

let result = arrayOne.map(el => {
  let found = arrayTwo.find(f => f.data.at(0)?.id == el.id)?.data.at(0)?.value;
  return { id: el.id, value: found ?? null};
});

const result = arrayTwo
  .map(obj => obj.data[0])
  .map(obj => (arrayOne.find(v => v.id === obj.id) && obj.value))

arrayOne.map(item => ({
   ...item,
   result: arrayTwo.filter(itemTwo => item.data.map(x => x.id).includes(itemTwo.id))
}));
问题分析

你之前的代码主要问题是:

  • 只检查了arrayTwo每个元素的data数组第一个元素,漏掉了后续的元素(比如第四个arrayTwo元素里的Sierra)
  • 部分代码返回的结构和期望的纯value数组不符
  • 第三段代码的匹配逻辑搞反了,导致筛选结果错误
解决方案

高效实现方案(推荐)

先把arrayOne的id存进集合提升查找速度,再扁平化arrayTwo的所有data元素,最后筛选匹配项提取value:

// 提取arrayOne的id集合,快速查找
const targetIds = new Set(arrayOne.map(item => item.id));
// 扁平化所有data子数组元素,筛选匹配项并提取value
const newArray = arrayTwo
  .flatMap(obj => obj.data)
  .filter(dataItem => targetIds.has(dataItem.id))
  .map(dataItem => dataItem.value);

console.log(newArray); // 输出 ['Bravo', 'Delta', 'Sierra']

基础嵌套遍历方案

如果不想用扁平化,直接嵌套遍历也能实现:

const targetIds = arrayOne.map(item => item.id);
const newArray = [];

// 遍历arrayTwo的每个元素
arrayTwo.forEach(obj => {
  // 遍历当前元素的data子数组
  obj.data.forEach(dataItem => {
    // 检查id是否在目标集合里
    if (targetIds.includes(dataItem.id)) {
      newArray.push(dataItem.value);
    }
  });
});

console.log(newArray); // 输出 ['Bravo', 'Delta', 'Sierra']

为什么推荐第一种方案?

用Set存储id的查找时间复杂度是O(1),比includes的O(n)更快,当数据量较大时性能优势明显;flatMap则简化了嵌套数组的遍历操作,代码更简洁。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 19:09:22