JavaScript es 6 конвертирует Map в json массив объектов - PullRequest
0 голосов
/ 11 апреля 2020

У меня есть карта с ключом и значением в качестве объекта json, например,

var myMap = new Map();

myMap.set('1', "mike");
myMap.set('2', "tom");

Как я могу превратить его в массив объектов, перестроив схему объекта (из-за запрашиваемого API) с value и fullame отображается на ключ и значение на карте выше, например

[{value : 1, fullName: "mike"},{value : 2, fullName: "tom"},...]

Я пытался использовать

Array.from(myMap).map(arr => ({ value: arr[0], fullName: arr[1] }));

(Обратите внимание, что Array.from(myMap) даст Вы получите результат в виде массива, как, нет способа нормально деструктурировать, используя имя свойства

[[1, "tom", 28],[2, "mike", 30],...]

Поскольку он сначала преобразуется в массив вложенных объектов, я должен найти идентификатор и имя через индекс с помощью карта типа arr[0] дает мне value и arr[1] дает мне fullName ...

Есть ли другой способ лучше? Использование Loda sh также приветствуется для предложений здесь!

Ответы [ 3 ]

1 голос
/ 12 апреля 2020

Есть ли другой способ лучше?

Вы можете использовать второй параметр Array.from вместо map, и вы можете использовать деструктуризацию параметра для аргумента кортежа :

Array.from(myMap, ([value, fullName]) => ({ value, fullName }));

Но нет, нет способа вручную создать этот массив объектов с именами пользовательских свойств value и fullName.

0 голосов
/ 11 апреля 2020

Я пробовал Array.from(myMap).map(arr => ({ value: arr[0], name: arr[1] }));, но это преобразует во вложенный объект

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

Array.from(myMap).map(arr => ({ value: arr[0], name: arr[1].name }));
//                                                         ^^^^^

Это можно упростить, используя синтаксис деструктурирования параметров до

Array.from(myMap).map(([value, {name}]) => ({ value, name }));
0 голосов
/ 11 апреля 2020

Если вы хотите игнорировать ключи идентификатора и получить только значения , используйте

Array.from(myMap.values())

Итератор по умолчанию возвращает кортежи с обоими.

...