Как получить все упорядоченные значения из заказной карты immutable.js без toJS? - PullRequest
0 голосов
/ 24 октября 2018

У меня есть такая упорядоченная карта, подобная этой:

{
 "200": { id: 200, name: "John" },
 "120": { id: 120, name: "Mike" },
 "350": { id: 350, name: "James" }
}

Как получить все упорядоченные значения без метода toJS?
Я пробовал:

map.valueSeq().toArray(), Array.from(map.values())

, ноон возвращает intermixed array.

Ответы [ 2 ]

0 голосов
/ 24 октября 2018

Вы можете сделать toList(), чтобы получить все values (т.е. не keys) карты в List неизменяемой структуре, которой вы можете в дальнейшем манипулировать позже, или выполните List(yourMap), если хотите key и value в виде массива кортежей.Согласно документам :

Это аналогично списку (коллекции), но предоставляется для учета связанных выражений.Однако при вызове на Map или других коллекциях с ключами collection.toList () отбрасывает ключи и создает список только значений, тогда как List (collection) создает список кортежей записей.

const { Map, List } = require('immutable') var myMap = Map({ a: 'Apple', b: 'Banana' }) List(myMap) // List [ [ "a", "Apple" ], [ "b", "Banana" ] ] myMap.toList() // List [ "Apple", "Banana" ]


Aclaration:

Javascript будет сортировать ваши исходные object ключи, если они числовые или могут быть проанализированы как числовые, поэтому вы можете сделать следующий обходной путь:

const PeopleMap = new OrderedMap([
 ["200", { id: 200, name: "John" }],
 ["120", { id: 120, name: "Mike" }],
 ["350", { id: 350, name: "James" }]
]);

Вот рабочий пример: https://jsfiddle.net/8kbcyfsn/

Объявляя его как массив пар ключ-значение, упорядоченная карта регистрирует правильный порядок.

Принимая во внимание, что если вы объявите его как объект,

const PeopleMap = new OrderedMap({
 "200": { id: 200, name: "John" },
 "120": { id: 120, name: "Mike" },
 "350", { id: 350, name: "James"}
});

Он попытается упорядочить его по значению Number(key).

0 голосов
/ 24 октября 2018

Я не уверен, правильно ли я понял ваш вопрос, но если бы я понял, вы могли бы попробовать:

Object.keys(obj).map(key => obj[key]);
...