javascript - 如何在没有 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
.
解决方案
您可以在不可变结构中获取地图的toList()
所有values
(不是keys
),List
以后可以进一步操作,或者List(yourMap)
如果您想要key
and 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)
值对其进行排序。
推荐阅读
- c++ - OS X 中的 TrackPopupMenu 等效项
- c# - 无法更改生成的游戏对象的 Sprite(仅限客户端)
- r - 如何在随机二进制向量中包含跳过的答案?
- php - 无法在数组上调用计数
- emacs - (emacs:804):GLib-GIO-CRITICAL **:g_settings_schema_source_lookup:断言'source!= NULL'失败
- ios - PhoneGap iOS 提交错误:ITMS-90807:无效授权 - 如何使用 SDK 13 或更高版本进行构建?
- npm - 使用 npm 在 Ubuntu 18.04 上安装 Strapi 问题
- python - 我已经安装了 PyTorch,但 CUDA 无法识别
- optimization - 使用 scipy 优化求解具有逐元素约束的参数矩阵
- sql - 两个表按顺序列出,但它们是如何链接的?