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

ES6中如何按type值匹配key后缀合并两个对象数组?

问题原因分析

你的代码存在几个明显错误,导致输出不符合预期:

  • 匹配逻辑错误:你使用b.includes(a.type)判断key是否匹配,会命中所有包含type值的key,不符合需求要求的「key末尾两个字符与type匹配」,应该改用endsWith方法判断后缀。
  • 动态属性访问错误:a.b、c.b的写法是固定取对象的b属性,无法读取变量b对应的属性名,访问动态属性需要使用方括号语法,即a[b]、c[b]。
  • 冗余遍历:你已经明确要取array2的第一个元素,不需要再遍历array2,直接读取array2[0]即可。
  • 方法使用不当:map方法用于返回新数组,如果你只是要修改原数组的元素,用forEach更符合语义。
实现代码

方案1:直接修改原array1

const target = array2[0];
const allKeys = Object.keys(target);

array1.forEach(item => {
  // 筛选后缀匹配当前type的key
  const matchedKeys = allKeys.filter(key => key.endsWith(item.type));
  // 合并属性到当前对象
  matchedKeys.forEach(key => {
    item[key] = target[key];
  })
})

方案2:不修改原数组,返回新结果数组

如果不想改动原始的array1,可以用这个方案:

const target = array2[0];
const allKeys = Object.keys(target);

const result = array1.map(item => {
  // 组装匹配到的属性对象
  const matchedProps = Object.fromEntries(
    allKeys
      .filter(key => key.endsWith(item.type))
      .map(key => [key, target[key]])
  )
  // 合并返回新对象
  return { ...item, ...matchedProps }
})

两种方案执行后都可以得到你给出的预期结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 14:36:04