Создание массива из подписи индекса - PullRequest
0 голосов
/ 07 мая 2020

У меня есть подпись индекса с числом в качестве ключа и объектом Person в качестве значений. Порядок результирующего массива не имеет значения.
Как можно создать массив всех значений Person из подписи индекса? В конце я ожидаю массив, содержащий два объекта Person.
См. Мой простой пример ниже и на jsfiddle.

Код:

interface Person {
  firstName: string;
  lastName:  string;
}

let firstUser = {
  firstName: "Malcolm",
  lastName:  "Reynolds"
};

let secondUser = {
  firstName: "Tom",
  lastName:  "Reynolds"
};

let indexSignature: {[key: number]: Person} = {};

indexSignature[158] = firstUser;
indexSignature[2] = secondUser;

// how to get an array of all Person objects in indexSignature?

jsfiddle:
Ссылка

1 Ответ

1 голос
/ 07 мая 2020

Это задание для ES2017 Object.values(), которое выполняет итерацию по свойствам объекта и возвращает массив только значений свойств. Порядок будет таким же, как порядок, который вы получаете от Object.keys() или for..in, но вы все равно не заботитесь о сохранении относительного порядка записей, так что это нормально.

Если у вас есть доступ на Object.values() тогда вы можете просто написать:

const arr = Object.values(indexSignature);
console.log(JSON.stringify(arr));
// [{"firstName":"Tom","lastName":"Reynolds"},
// {"firstName":"Malcolm","lastName":"Reynolds"}]

Выглядит хорошо. Если у вас нет ES2017, вам нужно будет заполнить его полифилом или переписать, используя Object.keys() или что-то в этом роде:

const arr2 = Object.keys(indexSignature).map(k => indexSignature[+k]);
console.log(JSON.stringify(arr2));
// [{"firstName":"Tom","lastName":"Reynolds"},
// {"firstName":"Malcolm","lastName":"Reynolds"}]

Хорошо, надеюсь, это поможет; удачи!

Детская площадка ссылка на код

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