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?
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>
Utilisez simplement someMap.toIndexedSeq().toArray()
pour obtenir un tableau de seules valeurs.
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()]