2015-10-15 109 views
8

我現在用的是不可變的映射,我需要得到的值超出數組傳遞到後端服務,我覺得我失去了一些東西基本,我該怎麼辦做它?Immutable.js值映射到陣列

我曾嘗試:

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

看到這個http://jsfiddle.net/3sjq148f/2/

,我們得到不可改變的數據結構回似乎依然對每個包含的對象不可改變裝飾領域的數組。這是預期的嗎?

+1

你能不能提供更多的細節?我想你也可以試試'toJS'。 –

+1

[jsfiddle](https://jsfiddle.net/3sjq148f/1),爲我工作。你甚至不需要'valueSeq'。你可以創建一個樣本來重現它嗎? – fuyushimoya

+2

試試這個: 'var array = [] mymap.valueSeq()。forEach(function(item){array.push(item)})' – javaguest

回答

3

這是因爲srObjectArray,所以如果你使用.fromJS將它轉換,就成了MapList

is.valueSeq().toArray();valueSeq是沒有必要在這裏。)將其轉換爲的MapArray,所以你需要通過數組循環,每個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()); 
 
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/immutable/3.7.5/immutable.min.js"></script>

12

只需使用someMap.toIndexedSeq().toArray()即可獲取僅有的數組值。