【问题标题】:How to convert a multidimensional array of strings to floats with jQuery?如何使用 jQuery 将多维字符串数组转换为浮点数?
【发布时间】:2014-11-17 05:44:30
【问题描述】:

我正在返回一个大型 JSON 对象,并且特定部分中的每个元素都是一个字符串。我需要能够将所有这些转换为浮点数。

数组目前的情况:

[
    ["1402408800","0.0"],
    ["1402408800","0.0"],
    ["1402408800","0.0"],
]

转换后需要如何:

[
    [1402408800,0.0],
    [1402408800,0.0],
    [1402408800,0.0],
]

我可以用v.PriceHistory 引用这个数组,所以我尝试了以下操作:

var newArr = [];
for (var i = 0; i < v.PriceHistory.length; i++) {
    parseFloat(v.PriceHistory[i]);
    newArr += v.PriceHistory[i];
}

虽然,上面只是将它全部作为一个数组返回,而不是恢复到原来的格式。

尝试了一些东西并在网上查看,但没有关于转换多维数组的内容。

【问题讨论】:

  • 我添加了另一个通用解决方案

标签: javascript jquery arrays multidimensional-array


【解决方案1】:

遍历大对象(帖子中的第一个代码段)并将当前数组的第二个元素设置为解析后的值。

代码示例(其中l 是大对象):

for (var i = 0; i < l.length; ++i) {
    l[i][1] = parseFloat(l[i][1]);
}

JSFiddle

【讨论】:

  • 有点模糊。您能否提供一个示例来说明您要解释的内容?
  • 我将数组中的字符串值(您在帖子的第一个代码段中显示的数组)替换为在字符串值上调用parseFloat 后获得的值。 (还为你加了一把小提琴)
  • 工作,稍微。仍然将 0 索引保留为字符串。检查控制台:0:"1402408800", 1: 0
  • @fizzix 抱歉,没有意识到第一个也是字符串。只需复制 for 循环中的行,并在第二个实例中将 1 替换为 0。
【解决方案2】:

这个呢:

var newArr = [];
for (var i = 0; i < v.PriceHistory.length; i++) {
  newArr[i] = [];
  for (var k = 0; k < v.PriceHistory[i].length; k++) {
  newArr[i].push(parseFloat(Price[i][k]));
  }
}

这行得通吗?

【讨论】:

    【解决方案3】:

    为此,您需要遍历数组的每个元素,检查一下它会对您有所帮助

    var yourArray = /*YOUR ARRAY*/;
    var newArray = [];
    for (var i = 0; i < yourArray.length; i++) {
        var currentArray = yourArray[i];
        for (var j = 0; j < currentArray.length; j++) {
            if(!newArray[i]){
               newArray[i]=[];
            }
            newArray[i][j] = parseFloat(currentArray[j], 10);
        }
    }
    console.log(newArray);
    

    【讨论】:

    • 收到以下错误:Uncaught TypeError: Cannot set property '0' of undefined。发生在newArray[i][j] = parseFloat(yourArray[i][j], 10);
    【解决方案4】:

    由于您已经在使用 jQuery,您可以使用 map() 更改数组中的所有元素:

    var a = [
        ["1402408800","0.0"],
        ["1402408800","0.0"],
        ["1402408800","0.0"],
    ];
    
    a = a.map(function(elem) {
        return elem.map(function(elem2) {
            return parseFloat(elem2);
        });
    });
    

    这是一个完全通用的函数,适用于任何 n 维数组:

    (function(elem) {
       var callee = arguments.callee;
       return elem instanceof Array ? elem.map(function(elem2) { return callee(elem2); })
                                    : parseFloat(elem);
     })
    (["1", "2", ["10", "20", ["100", "200"], "30"]]);
    

    如果你复制粘贴到控制台,你会看到输出:

    [1, 2, [10, 20, [100, 200], 30]]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-10-20
      • 2016-07-09
      • 2020-12-21
      • 2019-09-22
      • 2011-11-25
      • 2021-10-24
      • 1970-01-01
      • 2021-12-12
      相关资源
      最近更新 更多