我有一个字符串数组,我想将其变成每个键都是一个单词的对象。我正在这样做:
let arr = ['a', 'b', 'c'];
let obj = {};
obj[...arr] = true;
但是,这似乎不起作用:(
有人知道我在做什么错吗?
答案 0 :(得分:3)
您可以以更简洁的方式使用Array.prototype.reduce()
:
const fill = v => (o, k) => ({ ...o, [k]: v })
let arr = ['a', 'b', 'c']
let obj = arr.reduce(fill(true), {})
console.log(obj)
如果您真的不喜欢每次迭代都复制累加器o
,则可以改用Object.assign()
:
const fill = v => (o, k) => Object.assign(o, { [k]: v })
let arr = ['a', 'b', 'c']
let obj = arr.reduce(fill(true), {})
console.log(obj)
甚至只是
const fill = v => k => ({ [k]: v })
let arr = ['a', 'b', 'c']
let obj = Object.assign(...arr.map(fill(true)))
console.log(obj)
答案 1 :(得分:1)
使用forEach
的时间较短。
let arr = ['a', 'b', 'c'];
var obj = {}
arr.forEach(e=>obj[e]=true)
console.log(obj)
但是您可以使用Array.prototype.reduce(),它可能更快。
let arr = ['a', 'b', 'c'];
var obj = arr.reduce((acc,c,i)=>{
acc[c] = true; return acc;
},{})
console.log(obj)
相反,您可以使用spread syntax:
var obj = {
"a": true,
"b": true,
"c": true
}
var arr = [...Object.keys(obj)];
console.log(arr)
spread语法需要一个可迭代的对象(例如数组),但可以是一个对象,请参见iteration protocols。在上述情况下,我们使用Object.keys(obj)
返回一个数组。
答案 2 :(得分:1)
您可以使用reduce
函数用真实值填充obj
const arr = ['a', 'b', 'c'];
const obj = arr.reduce((acc, val) => {
acc[val] = true;
return acc;
}, {});
console.log(obj);