Синтаксис распространения в наборе ключей объекта не работает - PullRequest
0 голосов
/ 07 сентября 2018

У меня есть массив строк, и я хочу превратить его в объект, где каждый ключ - это слово. Я делаю это:

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

Однако, похоже, это не работает: (

Кто-нибудь знает, что я делаю не так?

Ответы [ 3 ]

0 голосов
/ 07 сентября 2018

Вы можете использовать функцию reduce, чтобы заполнить obj истинными значениями

const arr = ['a', 'b', 'c'];
const obj = arr.reduce((acc, val) => {
   acc[val] = true;
   return acc;
 }, {});
    
console.log(obj);
0 голосов
/ 07 сентября 2018

Вы можете использовать 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)
0 голосов
/ 07 сентября 2018

Использование 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)

Для обратного вы можете использовать синтаксис распространения :

var obj = {
    "a": true,
    "b": true,
    "c": true
  }
var arr = [...Object.keys(obj)];

console.log(arr)

Для синтаксиса распространения требуется итерация, например, массив, но это может быть объект, см. Это по протоколам итерации . В приведенном выше случае мы используем Object.keys(obj), который возвращает массив.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...