如何通过对象数组的key匹配目标对象属性,构建指定结构的新对象
错误原因说明
你最初写法报错有两个核心问题:
- 语法错误:
obj.[this.key]中多了多余的点号,点号属性访问和方括号属性访问不能混用该写法 - 上下文错误:箭头函数没有独立的
this指向,这里的this不指向当前遍历的数组元素item,根本无法获取到对应key值
你修改后的代码合理性
你调整后的写法是完全合理的,是符合现代JS规范的标准实现:
var combined = Object.fromEntries(arr.map(item => [item.value, obj[item.key]]));
该写法逻辑清晰可读性高,直接利用Object.fromEntries把键值对数组转成对象,完全匹配你的需求。
其他可选实现方案
如果有兼容更低版本JS运行环境的需求(比如要支持ES2019之前的环境,Object.fromEntries是ES2019才新增的API),可以使用reduce实现,兼容性更好:
var combined = arr.reduce(function (result, item) { result[item.value] = obj[item.key]; return result; }, {});
边界情况优化建议
如果存在数组里的key在源对象obj中不存在的场景,可以增加校验逻辑避免生成值为undefined的属性:
// 只保留obj中存在的key var combined = Object.fromEntries( arr .filter(item => obj.hasOwnProperty(item.key)) .map(item => [item.value, obj[item.key]]) );
内容的提问来源于stack exchange,提问作者Seju4ni
相关产品推荐
相关产品推荐

