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

JS仅当user键值匹配时合并两个对象数组的问题排查

原有代码问题排查
  • 存储结构用错:初始化result为数组,却用字符串类型的user值作为键赋值。这类自定义字符串键不会成为数组的数字索引元素,数组实际长度始终为0,后续调用filter遍历索引项时拿不到任何值,自然返回空数组。
  • 匹配逻辑不符合需求:就算修正存储结构,原有逻辑会把两个数组里所有出现过的user项都保留,比如示例中arr2独有的john也会被输出,和「仅合并两个数组user完全匹配的项、最终结果对齐arr1原有项」的要求不符。
正确实现方案

先将arr2转换为以user为键的查找映射,避免嵌套循环提升性能,再遍历arr1匹配对应项合并即可,最终输出完全符合预期:

const arr1 = [{ bank: 1, user: 'fred', depositAmount: 100, withdrawalAmount: 0 }];
const arr2 = [{ user: 'fred', gender: 'male', age: 27, state: "arizona" }, { user: 'john',gender: 'male', age: 28, state: "texas" }];

// 构建arr2的user查找表
const userMap = new Map(arr2.map(item => [item.user, item]));

// 遍历arr1合并匹配项
const result = arr1.filter(item => userMap.has(item.user))
                   .map(item => ({...item, ...userMap.get(item.user)}));

console.log(result);

如果需要直接修改原arr1而不是生成新数组,可以用以下写法:

const userMap = new Map(arr2.map(item => [item.user, item]));
arr1.forEach((item, idx) => {
  if (userMap.has(item.user)) {
    Object.assign(arr1[idx], userMap.get(item.user));
  }
});

运行后输出和预期完全一致:

[{ bank: 1, user: 'fred', depositAmount: 100, withdrawalAmount: 0, gender: 'male', age: 27, state: "arizona" }]

内容的提问来源于stack exchange,提问作者BreadBoard.ini

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 03:16:07