JavaScript 如何基于列表(数组)简洁快速初始化对象
实现方案
二维键值对列表转对象
针对[['prop1','value1'], ['prop2','value2']]这类固定键值对结构的列表,直接使用原生Object.fromEntries()即可一行完成对象初始化,无需手写循环:
const lst = [['prop1','value1'], ['prop2','value2']] const b = Object.fromEntries(lst); // 输出结果:{prop1: 'value1', prop2: 'value2'}
该API是ES2019标准新增的原生方法,适配所有现代浏览器及Node.js 12及以上版本。
动态属性列表配合映射逻辑生成对象
针对你补充的「动态长度属性列表+自定义值生成逻辑」的场景,只需要先通过Array.prototype.map把属性列表转换为[键名, 键值]格式的二维数组,再传入Object.fromEntries()即可,不需要逐一枚举列表元素:
const l = ['prop1', 'prop2']; const fx = str => str.substring(1); const b = Object.fromEntries(l.map(str => [str, fx(str)])); // 输出结果:{prop1: 'rop1', prop2: 'rop2'}
如果需要兼容不支持Object.fromEntries的老旧环境,可以用reduce实现等价的单行写法:
const b = l.reduce((acc, str) => (acc[str] = fx(str), acc), {});
目前JavaScript标准中不支持你提到的「在对象字面量内直接写循环批量生成属性」的语法,所有动态批量生成属性的实现,本质都是先构造键值对集合,再合并为最终对象。
内容的提问来源于stack exchange,提问作者Wouter Vandenputte
相关产品推荐
相关产品推荐

