У меня есть массив, который я хочу преобразовать в значение ключа. Значение должно быть массивом. Я использовал метод reduce
для этого, но он не работает правильно.
Вот мой код:
const questionNumber = [1,2,3,4]
const options =
questionNumber.length > 0
&& questionNumber.reduce((arr, val) => ({
...arr,
[val]: {answer: []},
}))
;
console.info(параметры):
2: {answer: Array(0)}
3: {answer: Array(0)}
4: {answer: Array(0)}
[[Prototype]]: Object
Но я хочу быть таким:
1: {answer: Array(0)}
2: {answer: Array(0)}
3: {answer: Array(0)}
4: {answer: Array(0)}
[[Prototype]]: Object
Я думаю, что было бы намного лучше, если бы вместо этого было нанесено на карту: questionNumber.map((val) => ({ [val]: { answer: [] } }));
, но это всего лишь мои пять копеек.
@Danry Это создаст массив, в котором каждый элемент будет объектом с одним свойством. OP хочет, чтобы все эти свойства были в одном объекте.
@gre_gor А, не уловил, мой плохой!
Вам нужно передать начальное значение метод уменьшения в соответствии с синтаксисом
arr.reduce( callback [, initial] );
В этом случае вам нужно передать пустой объект {}
в качестве начального значения во втором аргументе.
const questionNumber = [1,2,3,4]
const options =
questionNumber.length > 0
&& questionNumber.reduce((arr, val) => ({
...arr,
[val]: {answer: []},
}),{})
;
console.info(options);
Потому что вы не предоставили второй аргумент для уменьшения. Так ведет себя сокращение, когда вы этого не делаете.