如何在没有 toJS 的情况下从 immutable.js orderedmap 获取所有有序值?

How to get all ordered values from immutable.js orderedmap without toJS?

我有这样一个有序的地图:

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

如何不用toJS方法获取所有有序值?
我试过:

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

但它 returns 一个 intermixed array

我不确定我是否正确理解了你的问题,但如果我理解了,你可以试试:

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

您可以toList()在一个List不可变结构中获取地图的所有values(e.i。而不是keys)稍后可以进一步操作,或者如果您希望 keyvalue 作为各种元组数组,则执行 List(yourMap)。根据 docs

This is similar to List(collection), but provided to allow for chained expressions. However, when called on Map or other keyed collections, collection.toList() discards the keys and creates a list of only the values, whereas List(collection) creates a list of entry tuples.

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


宣言:

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) 值对其进行排序。