web-dev-qa-db-fra.com

Immutable.js Mapper les valeurs au tableau

J'utilise la carte immuable de http://facebook.github.io/immutable-js/docs/#/Map

J'ai besoin d'obtenir un tableau de valeurs pour passer à un service backend et je pense que je manque quelque chose de basique, comment faire?

J'ai essayé :

mymap.valueSeq().toArray()

Mais je reçois toujours une structure de données immuable?

Par exemple :

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());

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

Le tableau que nous récupérons de la structure de données immuable semble toujours orné des champs immuables pour chaque objet contenu. Est-ce à prévoir?

22
LenW

C'est parce que le sr est un Array de Object, donc si vous utilisez .fromJS Pour le convertir, il devient List de Map.

La fonction is.valueSeq().toArray(); (valueSeq n'est pas nécessaire ici.) La convertit en Array de Map, vous devez donc parcourir le tableau et convertir chaque Map élément vers 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());
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/immutable/3.7.5/immutable.min.js"></script>
14
fuyushimoya

Utilisez simplement someMap.toIndexedSeq().toArray() pour obtenir un tableau de seules valeurs.

21
Hüseyin Zengin

Map.values() renvoie un ES6 Iterable (comme le font Map.keys() et Map.entries() ), et donc vous pouvez convertir en un tableau avec Array.from() ou opérateur d'étalement (comme décrit dans cette réponse ) .

par exemple.:

Array.from(map.values())

ou juste

[...map.values()]

7
ericsoco