2016-11-30 72 views
0

這是我的數據集的最佳方式:是什麼將這些值轉換從字符串這組數據爲int

data_p = [ 
[ {"key":"Device_Model","value":"test_model"}, 
    {"key":">20MB/30","value":"11"}, 
    {"key":">200MB/30","value":"33"}, 
    {"key":">2048MB/30","value":"10"}, 
    {"key":">5120MB/30","value":"55"}, 
    {"key":">10240MB/30","value":"10"} 
], 
[{"key":"Device_Model","value":"0P6B670"}, 
{"key":">20MB/30","value":"9"}, 
{"key":">200MB/30","value":"8"}, 
{"key":">2048MB/30","value":"2"}, 
{"key":">5120MB/30","value":"23"}, 
{"key":">10240MB/30","value":"23"}], 
[{"key":"Device_Model","value":"0P6B680"}, 
{"key":">20MB/30","value":"1"}, 
{"key":">200MB/30","value":"23"}, 
{"key":">2048MB/30","value":"23"}, 
{"key":">5120MB/30","value":"23"}, 
{"key":">10240MB/30","value":"23"}], 
[{"key":"Device_Model","value":"0P6B810"}, 
{"key":">20MB/30","value":"5"}, 
{"key":">200MB/30","value":"4"}, 
{"key":">2048MB/30","value":"1"}, 
{"key":">5120MB/30","value":"1"}, 
{"key":">10240MB/30","value":"1"}], 
[ {"key":"Device_Model","value":"0P6B900"}, 
{"key":">20MB/30","value":"4"}, 
{"key":">200MB/30","value":"4"}, 
{"key":">2048MB/30","value":"1"}, 
{"key":">5120MB/30","value":"23"}, 
{"key":">10240MB/30","value":"23"}]] 

這是我做的方式,但我想知道的減少,地圖或過濾器一個更好的方法來做到這一點。我的意思是我應該在forEach函數中使用for循環嗎?我也不喜歡這樣,因爲這是非常靜態的,如果數據集中有6個以上的話?

data_p.forEach(function(d){for(i=1; i<6; i++){console.log(d[i].value); d[i].value=+d[i].value}}) 

這會給我:

data_p = [ 
    [ {"key":"Device_Model","value":"test_model"}, 
     {"key":">20MB/30","value":11}, 
     {"key":">200MB/30","value":33}, 
     {"key":">2048MB/30","value":10}, 
     {"key":">5120MB/30","value":55}, 
     {"key":">10240MB/30","value":10} 
    ], 
... 

所以,問題是有沒有更好的方式來實現這一目標?

回答

2

迭代所有元素。檢查值是數字(isNaN),然後更新屬性

var data_p = [ 
 
[ {"key":"Device_Model","value":"test_model"}, 
 
    {"key":">20MB/30","value":"11"}, 
 
    {"key":">200MB/30","value":"33"}, 
 
    {"key":">2048MB/30","value":"10"}, 
 
    {"key":">5120MB/30","value":"55"}, 
 
    {"key":">10240MB/30","value":"10"} 
 
], 
 
[{"key":"Device_Model","value":"0P6B670"}, 
 
{"key":">20MB/30","value":"9"}, 
 
{"key":">200MB/30","value":"8"}, 
 
{"key":">2048MB/30","value":"2"}, 
 
{"key":">5120MB/30","value":"23"}, 
 
{"key":">10240MB/30","value":"23"}], 
 
[{"key":"Device_Model","value":"0P6B680"}, 
 
{"key":">20MB/30","value":"1"}, 
 
{"key":">200MB/30","value":"23"}, 
 
{"key":">2048MB/30","value":"23"}, 
 
{"key":">5120MB/30","value":"23"}, 
 
{"key":">10240MB/30","value":"23"}], 
 
[{"key":"Device_Model","value":"0P6B810"}, 
 
{"key":">20MB/30","value":"5"}, 
 
{"key":">200MB/30","value":"4"}, 
 
{"key":">2048MB/30","value":"1"}, 
 
{"key":">5120MB/30","value":"1"}, 
 
{"key":">10240MB/30","value":"1"}], 
 
[ {"key":"Device_Model","value":"0P6B900"}, 
 
{"key":">20MB/30","value":"4"}, 
 
{"key":">200MB/30","value":"4"}, 
 
{"key":">2048MB/30","value":"1"}, 
 
{"key":">5120MB/30","value":"23"}, 
 
{"key":">10240MB/30","value":"23"}]] 
 

 

 

 
data_p.forEach(list => 
 
     list.forEach(pair => 
 
      !isNaN(pair.value) && (pair.value = Number(pair.value)) 
 
     ) 
 
); 
 

 
console.log(data_p);

+0

tks,你能簡單地解釋一下它的作用嗎?什麼是pair,=>和list? tks – HattrickNZ

+0

好吧,我只是給參數名稱,使其可讀性。您的根數據結構包含對象數組。他們是一種數據列表,所以我將它們分別命名爲「列表」。列表內容包含鍵和值屬性。理論上他們是一種關鍵價值對。所以,我將它們分別命名爲「對」。 –

0

的是這樣做的許多方面。

E.G.使用array.forEacharray.reduce

data_p.forEach(function(a) { 
    a.reduce(function(ignore, obj) { 
     obj.value = Number(obj.value); 
    }); 
}); 

此修改用途減少遍歷所有數組元素除了第一更新到位data_p。它可以擴大檢查轉換爲數字的值是一個數字:

data_p.forEach(function(a) { 
    a.reduce(function(ignore, obj) { 
     var temp = Number(obj.value); 
     if(!isNaN(temp) { 
       obj.value = temp; 
     } 
    }); 
}); 

E.G.使用array.map創建一個新的陣列和陣列內容

var newArray = data_p.map(a => a.map((o,i)=>(
    { key: o.key, 
     value: o.key=="Device_Model" ? o.value : +o.value} 
))); 

不同於第一示例中,這方法不發生變異(在其內或對象)data_p並假定DATA_P包含有效條目。

0

而不是使用我< 6,爲什麼不d.length?

但是,我不知道什麼是正在完成或爲什麼。最終的結果似乎是,你的代碼值是從字符串轉換爲數字的,但這不是明顯的原因。

相關問題