ES6 数组解构并分配给没有函数的对象
ES6 Array destructure and assign to object without functions
我想知道如果没有 map
、 reduce
或任何其他函数,这个初步代码是否可行?
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' }
但是如果你想去 "fancier," 你可以使用 Object.assign
和一堆使用扩展符号和 map
和箭头函数的临时对象:
let obj = {};
Object.assign(obj, ...arr1.map(str => ({[str]: 'Value'})));
另请参阅 Jared Smith 的 ,它与此 assign
版本非常相似,但可能效率更高一些(仍然创建了很多不必要的临时对象,但处理这些对象的效率更高) .
实例:
const arr1 = ['str', 'str2'];
let obj = {};
Object.assign(obj, ...arr1.map(str => ({[str]: 'Value'})));
console.log(obj); // Expected output: { str1: 'Value', str2: 'Value' }
如果你愿意,你也可以把它塞进reduce
(因为几乎任何数组操作都可以塞进reduce
):
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' }
不过,我会保持简单,并使用循环。 :-)
如果您愿意,可以使用新的 Object.fromEntries
:
var obj = Object.fromEntries(arr.map(str => [str, "Value"]));
请注意,这是非常新的,可能需要填充。
无法传播一个值并获得以此项为键和另一个值的对象。
您需要通过向数组添加自定义生成器来获得具有所需内部的对象,该生成器会为每个项目返回一个对象。
const arr1 = ['str', 'str2'];
arr1[Symbol.iterator] = function* () {
for (let i = 0; i < this.length; i++) yield { [this[i]]: 'Value' };
};
let obj = {};
Object.assign(obj, ...arr1);
console.log(obj);
我想知道如果没有 map
、 reduce
或任何其他函数,这个初步代码是否可行?
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' }
但是如果你想去 "fancier," 你可以使用 Object.assign
和一堆使用扩展符号和 map
和箭头函数的临时对象:
let obj = {};
Object.assign(obj, ...arr1.map(str => ({[str]: 'Value'})));
另请参阅 Jared Smith 的 assign
版本非常相似,但可能效率更高一些(仍然创建了很多不必要的临时对象,但处理这些对象的效率更高) .
实例:
const arr1 = ['str', 'str2'];
let obj = {};
Object.assign(obj, ...arr1.map(str => ({[str]: 'Value'})));
console.log(obj); // Expected output: { str1: 'Value', str2: 'Value' }
如果你愿意,你也可以把它塞进reduce
(因为几乎任何数组操作都可以塞进reduce
):
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' }
不过,我会保持简单,并使用循环。 :-)
如果您愿意,可以使用新的 Object.fromEntries
:
var obj = Object.fromEntries(arr.map(str => [str, "Value"]));
请注意,这是非常新的,可能需要填充。
无法传播一个值并获得以此项为键和另一个值的对象。
您需要通过向数组添加自定义生成器来获得具有所需内部的对象,该生成器会为每个项目返回一个对象。
const arr1 = ['str', 'str2'];
arr1[Symbol.iterator] = function* () {
for (let i = 0; i < this.length; i++) yield { [this[i]]: 'Value' };
};
let obj = {};
Object.assign(obj, ...arr1);
console.log(obj);