Как я могу создать словарь в Javascript, где все ключи отображаются на одно и то же значение? - PullRequest
2 голосов
/ 09 июля 2020

У меня есть массив вроде:

let arr = ['ABC', 'DEF']

И я хотел бы преобразовать этот массив в

let obj = {"ABC": 0, "DEF": 0}

Какой подходящий синтаксис ES6 для выполнения этого преобразования?

let arr = ['ABC', 'DEF']
arr.reduce(x => ({[x] : 0 }))

Это близко, но я получаю {"ABC": 0}

По сути, я хочу взять массив произвольной длины и присвоить всем значениям в этом массиве значение «по умолчанию» 0.

Спасибо!

Ответы [ 4 ]

1 голос
/ 09 июля 2020

Просто используйте простой, простой l oop:

const arr = ['ABC', 'DEF'];
const obj = {};
for (const x of arr) obj[x] = 0;

Если вы хотите пофантазировать, я бы порекомендовал Object.fromEntries:

Object.fromEntries(arr.map(x => [x, 0]))
0 голосов
/ 09 июля 2020

Вы можете просто использовать Array.reduce и передать пустой объект в качестве начального значения, как в приведенном ниже коде:

var arr = ["ABC","DEF"].reduce((a,b)=> (a[b]=0,a),{});
console.log(arr);
0 голосов
/ 09 июля 2020
obj = arr.reduce((result, item, index) => {
  result[item] = 0
  return result
}, {})

Надеюсь, это вам поможет. дайте мне знать, если у вас возникнут проблемы.

0 голосов
/ 09 июля 2020

Вы просто создаете отдельные объекты, такие как карта. Вам нужно продолжать возвращать объект.

const arr = ['ABC', 'DEF']
const result = arr.reduce((o, k)  => ({[k] : 0, ...o }), {});
console.log(result)



const result2 = arr.reduce((o, k)  => (o[k] = 0, o), {});
console.log(result2)
...