【问题标题】:Why is Javascript parseFloat appending extra value in for loop?为什么 Javascript parseFloat 在 for 循环中附加额外的值?
【发布时间】:2013-06-26 13:37:52
【问题描述】:

我有一个字符串数组,需要将其转换为带小数的数字数组。字符串数组如下所示:

var array = ["  169.70", "  161.84", "  162.16", "  176.06", "  169.72", "  170.77", "  172.74", "  175.73", "    0.00", "    0.00", "    0.00", "    0.00"] 

我创建了一个简短的函数来解析每个数组元素,如下所示:

function parseFloatArray(array) {
    var parsedArray = [];
        for (var i = 0; i < array.length ; i++) {
            parsedArray[i] = parseFloat(array[i]);
            parsedArray.push(parsedArray[i]);           
            console.log(parsedArray[i]);
        };
    return parsedArray;
}

记录 array.length 给我一个值 12。for 循环中的日志也返回 12 个单独的值。但是,console.log(parsedArray) 给了我以下长度为 13 的数组(注意尾随零):

[169.7, 161.84, 162.16, 176.06, 169.72, 170.77, 172.74, 175.73, 0, 0, 0, 0, 0] 

我有什么想法可以改进这个功能,以及为什么它会附加一个零,尽管所有日志都显示了 12 个值?

【问题讨论】:

  • 试试array.map(parseFloat) ;)
  • 你分配推?仅供参考,array.map(parseFloat) 更干净。编辑: ...就像 thg435 说的。 :D
  • 哦,新手为自己创造了额外的工作。感谢 array.map(parseFloat) 提示。效果很好。

标签: javascript arrays for-loop parsefloat


【解决方案1】:

数组方法map可能很好用,它返回一个新数组,其中包含从函数返回的每个项目的值(例如,parseFloat):

    var array= ["  169.70", "  161.84", "  162.16", "  176.06", "  169.72", 
"  170.77", "  172.74", "  175.73", "    0.00", "    0.00", "    0.00", "    0.00"];

var parsedArray= array.map(parseFloat);
>>>value: (Array)     
[169.7, 161.84, 162.16, 176.06, 169.72, 170.77, 172.74, 175.73, 0, 0, 0, 0];

如果你必须支持IE

Array.prototype.map= Array.prototype.map || function(fun, scope){
    var T= this, L= T.length, A= Array(L), i= 0;
    if(typeof fun== 'function'){
        while(i<L){
            if(i in T){
                A[i]= fun.call(scope, T[i], i, T);
            }
            ++i;
        }
        return A;
    }
}

【讨论】:

    【解决方案2】:

    只放一次:

    function parseFloatArray(array) {
        var parsedArray = [];
        for (var i = 0; i < array.length; i++) {
            parsedArray.push(parseFloat(array[i]));
        }
        return parsedArray;
    }
    

    【讨论】:

    • 我接受了这个答案,因为它确实解决了问题。我喜欢 cmets 中对原始帖子的 .map(parseFloat) 建议。
    猜你喜欢
    • 2018-12-18
    • 2021-08-15
    • 1970-01-01
    • 2020-08-27
    • 2022-12-18
    • 2023-01-16
    • 2022-11-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多