如何从不带toJS的immutable.jsorderedmap获取所有有序值?

时间:2018-10-24 13:45:06

标签: javascript 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

2 个答案:

答案 0 :(得分:1)

您可以执行toList()values不变结构的形式获取地图的所有keys(不是List),以后可以进行进一步操作,或者执行List(yourMap),如果您想将keyvalue作为元组数组。根据{{​​3}}:

  

这类似于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" ]


声明:

如果源object是数字键或可解析为数字键,则Javascript将对它们进行排序,因此您可以执行以下解决方法:

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

这是一个有效的示例:docs

通过将其声明为键值对数组,有序映射将注册正确的顺序。

如果您将其声明为对象,

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

它将尝试按Number(key)值对其进行排序。

答案 1 :(得分:0)

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

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