对象密钥集中的传播语法不起作用

时间:2018-09-06 23:25:29

标签: javascript object key spread-syntax

我有一个字符串数组,我想将其变成每个键都是一个单词的对象。我正在这样做:

let arr = ['a', 'b', 'c'];
let obj = {};
obj[...arr] = true;

但是,这似乎不起作用:(

有人知道我在做什么错吗?

3 个答案:

答案 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);

相关问题