【问题标题】:How to convert currency Strings from Array如何从数组转换货币字符串
【发布时间】:2014-08-13 11:38:24
【问题描述】:

我有一个数组,其中包含一个数组列表,值以“美元”为单位。 我需要从该列表中获取最高价格和最低价格。

这是尝试过的,

var _array = [$1.09,$3.07,$2.223];
var number = Number(_array.replace(/[^0-9\.]+/g,""));
a= Math.max.apply(Math,number); // $3
b= Math.min.apply(Math,number); // $1

但它不起作用,任何人都可以帮助我。

Demo Link

【问题讨论】:

  • 数组元素的第一个字符不是数字,而是字符串。它们需要被引用,否则你(应该)有语法错误。

标签: javascript arrays


【解决方案1】:

问题是您的数组中有非法字符。通过包裹'' 让它们像字符串一样。

像下面那样做

var _array = ['$1.09','$3.07','$2.223'];
var numbers = _array.map(function(curr){
    return Number(curr.replace(/[^0-9\.]+/g,""))
})
a= Math.max.apply(Math,numbers); // 3
b= Math.min.apply(Math,numbers); // 1
console.log(a,b)

DEMO

注意:- .map 函数在 IE8 上不起作用,因此您可以在那里使用 for 循环。如下所示

var _array = ['$1.09','$3.07','$2.223'];
var numbers = [];

for(var i=0;i<_array.length;i++){
    numbers.push(_array[i].replace(/[^0-9\.]+/g,""));
}

a= Math.max.apply(Math,numbers); // 3
b= Math.min.apply(Math,numbers); // 1
console.log(a,b)

DEMO

【讨论】:

    【解决方案2】:

    如果您纠正列表数组排序中的错误可能很简单

    var _array = ["$1.09", "$3.07", "$2.223"];
    _array.sort(function(a, b) {
        return Number(a.replace(/[^0-9\.]+/g, "")) - Number(b.replace(/[^0-9\.]+/g, ""));
    });
    
    console.log(_array[0], "   ", _array[_array.length - 1]);
    

    打开浏览器检查器并运行上述代码。

    感谢@Meze 的贡献,使 10.01 比 2 高出 2 或类似

    【讨论】:

    • 好主意,但不是真的,因为字符串的排序将按字母顺序完成,所以"$10.0" 将在"$2.0" 之前...
    • 可以,只要它的通用货币为$并且所有列表中都有$。它将被视为 ["01.09","03.07","02.223"];因为 $ 也将评估为相同的 Unicode 字符。请记住,实际排序是针对 Unicode 字符而不是您看到的数字执行的
    • 可以通过回调解决:_array.sort(function (a, b) { return Number(a.replace(/[^0-9\.]+/g,"")) - Number(b.replace(/[^0-9\.]+/g,"")); });
    • 用["$10.09", "$1.12", "$3.07","$2.223"]数组试试吧。
    • @Paullo 这并不过分。需要比较“10”和“2”。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多