将此数据集中的值从字符串转换为 int 的最佳方法是什么
what is the best way to convert the values in this data set from strings to 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 循环吗?我也不喜欢 i<6,因为这是非常静态的,如果数据集中有超过 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}
],
...
所以问题是有没有更好的方法来实现这个?
迭代所有元素。检查值是否为数字 (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);
有很多方法可以做到这一点。
使用 array.forEach
和 array.reduce
就地更新 data_p
data_p.forEach( function(a) {
a.reduce( function( ignore, obj) {
obj.value = Number(obj.value);
});
});
这修改了使用 reduce 迭代所有数组元素除了第一个。可以扩展检查转换为数字的值是否为数字:
data_p.forEach( function(a) {
a.reduce( function( ignore, obj) {
var temp = Number(obj.value);
if( !isNaN(temp) {
obj.value = temp;
}
});
});
使用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 包含有效条目。
而不是使用 i<6,为什么不 d.length?
但是,我不确定正在完成什么或为什么。最终结果似乎是您的代码值从字符串转换为数字,但原因并不明显。
这是我的数据集:
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 循环吗?我也不喜欢 i<6,因为这是非常静态的,如果数据集中有超过 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}
],
...
所以问题是有没有更好的方法来实现这个?
迭代所有元素。检查值是否为数字 (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);
有很多方法可以做到这一点。
使用 array.forEach
和 array.reduce
data_p
data_p.forEach( function(a) {
a.reduce( function( ignore, obj) {
obj.value = Number(obj.value);
});
});
这修改了使用 reduce 迭代所有数组元素除了第一个。可以扩展检查转换为数字的值是否为数字:
data_p.forEach( function(a) {
a.reduce( function( ignore, obj) {
var temp = Number(obj.value);
if( !isNaN(temp) {
obj.value = temp;
}
});
});
使用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 包含有效条目。
而不是使用 i<6,为什么不 d.length?
但是,我不确定正在完成什么或为什么。最终结果似乎是您的代码值从字符串转换为数字,但原因并不明显。