Javascript массив уменьшить массив преобразования в объект с целочисленными ключами - PullRequest
0 голосов
/ 24 мая 2019

Я пытаюсь преобразовать массив объектов в объекты с помощью метода Reduce.Проблема в том, что я хочу, чтобы ключи объектов были в числовом формате.

let crops = [{
  id: 1,
  name: "wheat"
}, {
  id: 2,
  name: "rice"
}];

let cropsObj = crops.reduce((accumulator, currentValue) => {
  accumulator[currentValue.id] = currentValue.name
  return accumulator;
}, {});

console.log(cropsObj);

Это прекрасно работает, за исключением того, что ключи, которые я получаю, являются строками.Например:

{"1":"wheat","2":"rice"}

Я хочу {1:"wheat",2:"rice"}.Как я могу преобразовать ключи в целые числа?

Ответы [ 3 ]

2 голосов
/ 24 мая 2019

Для иллюстрации комментария @ MarkMeyer:

Ключи могут быть только строками (или символами) в объектах javascript.

console.log({3: 4, '3': 5});
1 голос
/ 25 мая 2019

Для ваших целей (с использованием таблицы материалов) ваши текущие объекты будут работать нормально. {1:"wheat"} фактически совпадает с {"1":"wheat"}.

Имена свойств / ключи объектов без кавычек в JavaScript дают очень подробное объяснение причин. Короче говоря, можно использовать числовые имена свойств, но они будут преобразованы в строки.

1 голос
/ 24 мая 2019

let obj = {
  key: 4,
  123: 'one two three',
  1: 'one'
};

console.log(obj.key);
//console.log(obj.1); error
console.log(obj["1"]);
console.log(obj["123"]);

console.log(obj[1]);
console.log(obj[123]);

Это невозможно, поскольку ключом в любом объекте JavaScript является JavaScript identifier или string.

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