Как получить все упорядоченные значения из заказной карты immutable.js без toJS?

1

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

{
 "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.

Теги:
immutable.js

2 ответа

0
Лучший ответ

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

Это похоже на List (collection), но предоставляется для приведения в соответствие цепочек. Однако при вызове 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
    Вы правы, однако, если вы проверите этот форк jsfiddle.net/y56nw384, который вы можете увидеть, если вы используете нечисловую строку, она работает. Я думаю, что в работе OrderedMap есть что-то, что он пытается отсортировать, если ключ имеет номер типа.
  • 0
    Я думаю, что это решает проблему. Дело не в том, что вы делаете неправильно, а в том, что OrderedMap ведет себя странно, когда ключи разбираются как числовые.
Показать ещё 2 комментария
0

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

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню