Immutable.js将值映射到数组

Len*_*enW 22 javascript immutable.js

我正在使用来自http://facebook.github.io/immutable-js/docs/#/Map的不可变地图

我需要获取一组值以传递给后端服务,我想我遗漏了一些基本的东西,我该怎么做?

我试过了 :

mymap.valueSeq().toArray()

但我仍然得到一个不可变的数据结构?

例如 :

var d = '[{"address":"10.0.35.118","cpus":4}]';
var sr = JSON.parse(d);
var is = Immutable.fromJS(sr);

console.log(sr);

console.log(is.toArray());
console.log(is.valueSeq().toArray());
Run Code Online (Sandbox Code Playgroud)

http://jsfiddle.net/3sjq148f/2/

我们从不可变数据结构返回的数组似乎仍然使用每个包含对象的不可变字段进行装饰.这是预料之中的吗?

Hüs*_*gin 21

只是someMap.toIndexedSeq().toArray()用于获取一组唯一的值.


fuy*_*oya 15

这是因为,srArrayObject,所以如果你使用.fromJS它进行转换,就变成ListMap.

is.valueSeq().toArray();(valueSeq在这里没有必要.)把它转换成ArrayMap,所以你通过数组需要循环,并转换每个Map项目Array.

var d = '[{"address":"10.0.35.118","cpus":4}]';
var sr = JSON.parse(d);

// Array of Object => List of Map
var is = Immutable.fromJS(sr);

console.log(sr);
console.log(is.toArray());

// Now its Array of Map
var list = is.valueSeq().toArray();

console.log(list);

list.forEach(function(item) {
  
  // Convert Map to Array
  console.log(item.toArray());
});
Run Code Online (Sandbox Code Playgroud)
<script src="https://cdnjs.cloudflare.com/ajax/libs/immutable/3.7.5/immutable.min.js"></script>
Run Code Online (Sandbox Code Playgroud)


eri*_*oco 7

Map.values()返回ES6可迭代(像Map.keys()Map.entries()),因此,你可以转换到一个数组Array.from()传播运营商(如中描述的这个答案).

例如:

Array.from(map.values())

要不就

[...map.values()]