我想知道如果没有地图,减少或任何其他功能,这个初步代码是否可行?
const arr1 = ['str','str2']; let obj = {}; Object.assign(obj,[...arr1] : 'Value'); console.log(obj); // Expected output: { str1: 'Value',str2: 'Value' }
重点是将每个数组元素转换为一个对象键并为其分配一个静态值,引起我注意的是,是否可以通过使用简单的语法并将数组解构为与伪代码类似?由于我找不到任何关于此的信息,我只是想把这个问题清除掉.
解决方法
您不能传播数组元素以将它们用作对象中的单独属性的属性名称.
最简单的方法就是在事后使用循环:
let obj = {}; for (const str of arr1) { obj[str] = 'Value'; }
实例:
const arr1 = ['str','str2']; let obj = {}; for (const str of arr1) { obj[str] = 'Value'; } console.log(obj); // Expected output: { str1: 'Value',str2: 'Value' }
但是如果你想要“发烧友”,你可以使用Object.assign和一堆临时对象,使用扩展符号和map和箭头函数:
let obj = {}; Object.assign(obj,...arr1.map(str => ({[str]: 'Value'})));
另请参阅Jared Smith的answer using fromEntries
,它与此分配版本非常相似,但可能更高效(仍会创建大量不必要的临时对象,但更有效地处理这些对象).
实例:
const arr1 = ['str',...arr1.map(str => ({[str]: 'Value'}))); console.log(obj); // Expected output: { str1: 'Value',str2: 'Value' }
如果你想要的话,你也可以穿上它来减少它(因为几乎任何阵列操作都可以减少角度):
let obj = arr1.reduce((o,str) => { o[str] = 'Value'; return o; },{});
实例:
const arr1 = ['str','str2']; let obj = arr1.reduce((o,{}); console.log(obj); // Expected output: { str1: 'Value',str2: 'Value' }
然后也许(ab)使用逗号运算符,因此箭头函数可以使用简洁的正文:
let obj = arr1.reduce((o,str) => (o[str] = 'Value',o),str2: 'Value' }
不过,我会保持简单,并使用循环.