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
相关产品推荐
相关产品推荐

