2016-11-30 81 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?

但是,我不知道什么是正在完成或为什么。最终的结果似乎是,你的代码值是从字符串转换为数字的,但这不是明显的原因。

相关问题