Как деструктурировать объекты с именами ключей, которые являются числами? - PullRequest
0 голосов
/ 11 июня 2018

У меня есть реквизиты, которые должны быть разобраны в компоненте.Как следует из API, на самом деле это объект, из которого я хотел бы брать объекты от 0 до 39. Однако, когда я пытаюсь деструктурировать их следующим образом:

 const { 0, ...39: weatherData } = this.props;

VSCode выдает мне ошибкунеожиданный токен из-за запятой.Как я могу деструктурировать реквизит, не перечисляя каждый отдельный объект?

Ответы [ 2 ]

0 голосов
/ 11 июня 2018

В JavaScript, даже если вы создали свой объект, используя number в качестве ключа, ключи всегда являются строками, возьмите следующий пример:

const obj = {
  [1]: 1,
  anotherThing: 2
};

console.log(Object.keys(obj))

Однако, поскольку '1' или 1 являются литералами, использование их в назначении деструктурирования невозможно, чтобы использовать числовые ключи, которые необходимо преобразоватьваш объект для iterable или сопоставления свойств вручную,

Самый простой способ преобразовать ваш объект в итеративный - это использовать Object.assign с массивом, поскольку массив также является объектом, вы можете сделать следующее:

const arr = Object.assign([], obj);

И чтобы выполнить свою цель, что-то вроде:

const obj = {
  [0]: 0,
  [1]: 1,
  wheaterData: 'wheaterData',
  anotherNonNumericProp: '1'
};

const arrOfNumericProps = Object.assign([], obj);

const [prop0, prop1] = arrOfNumericProps;

const {wheaterData,
  ...rest
} = arrOfNumericProps;

console.log(prop0);
console.log(prop1);

console.log(wheaterData);
console.log(rest);
0 голосов
/ 11 июня 2018

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

const array = Object
    .assign([], { abc: 1, 0: 100, 1: 101, 39: 139, 40: 140 })
    .slice(0, 40);

console.log(Array.isArray(array));
console.log(array);
.as-console-wrapper { max-height: 100% !important; top: 0; }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...