将此数据集中的值从字符串转换为 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.forEacharray.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?

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