javascript – ES6数组解析并分配给没有函数的对象
作者:互联网
我想知道如果没有地图,减少或任何其他功能,这个初步代码是否可行?
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', 'str2'];
let obj = {};
Object.assign(obj, ...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, str) => {
o[str] = 'Value';
return o;
}, {});
console.log(obj); // Expected output: { str1: 'Value', str2: 'Value' }
然后也许(ab)使用逗号运算符,因此箭头函数可以使用简洁的正文:
let obj = arr1.reduce((o, str) => (o[str] = 'Value', o), {});
实例:
const arr1 = ['str', 'str2'];
let obj = arr1.reduce((o, str) => (o[str] = 'Value', o), {});
console.log(obj); // Expected output: { str1: 'Value', str2: 'Value' }
不过,我会保持简单,并使用循环.
标签:javascript,arrays,ecmascript-6,destructuring 来源: https://codeday.me/bug/20190716/1473823.html