首页 > 解决方案 > 如何在没有 toJS 的情况下从 immutable.js 有序映射中获取所有有序值?

问题描述

我有这样的有序地图:

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

标签: javascriptimmutable.js

解决方案


您可以在不可变结构中获取地图的toList()所有values(不是keys),List以后可以进一步操作,或者List(yourMap)如果您想要keyand 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" ]


声明:

如果源键是数字或可解析为数字,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)值对其进行排序。


推荐阅读