将一串逗号分隔的数字转换为数字

时间:2014-03-11 14:29:14

标签: javascript node.js express mathjs

我正在尝试获取逗号分隔数字的列表,以便在Node.js中的math.js库(https://github.com/josdejong/mathjs/blob/master/docs/functions.md)中处理。

虽然我得到了像“2,4,5”这样的数字列表,但是做了一个逗号分割以存储在一个数组中。该库拒绝使用它的math.add()函数处理我的数组。它需要个别整数来处理。我可以使用array [0],array [1]的函数,但我想使用单个变量一次性提供所有整数。

exports.add = function(req, res) {
    var v = req.params.v;
    var array = v.split(",");
    var intarray = [];
    for(var i=0; i<array.length; i++) {
        intarray[i] = +array[i];
    }
    var result = math.add(intarray);
    res.end(result.toString());
}

3 个答案:

答案 0 :(得分:4)

更新:您已经说过想要使用所有值来调用math.add一次,但我认为它不支持这样做。关于函数的文档和the source都说它只支持两个参数,而不是它们的无限系列。

所以你不能马上做到这一切;在解析时,你最好不要这样做:

exports.add = function(req, res) {
    var v = req.params.v;
    var array = v.split(",");
    var result = 0;
    for(var i=0; i<array.length; i++) {
        result = math.add(result, +array[i]);
    }
    res.end(result.toString());
}

或者在启用ES5(或收缩)的环境中:

exports.add = function(req, res) {
    var result = 0;
    req.params.v.split(",").forEach(function(val) {
        result = math.add(result, val);
    });
    res.end(result.toString());
}

因为您知道这些是JavaScript编号,所以我根本没有理由使用math.add。它只是将它们加在一起,允许各种类型。但是你知道这些数字的类型,所以除了通过调用它之外你没有得到任何东西。

我去看之前的原始答案:


  

需要处理个别整数。我可以使用array [0],array [1]的函数,但我想使用单个变量一次性提供所有整数。

如果math.add支持一系列离散参数,则可以像这样使用数组:

var result = math.add.apply(math, intarray);

apply使用您在调用中作为this值的第一个参数调用您调用它的函数,并将您作为第二个参数的数组内容作为个体调用函数的参数。

通过示例更容易理解:

/// A function accepting three formal arguments
function foo(a, b, c) {
    console.log("a = " + a);
    console.log("b = " + b);
    console.log("c = " + c);
}

// An array with 1, 2, 3 in it
var a = [1, 2, 3];

// Call `foo`, passing in the array to use as the discrete arguments
foo.apply(undefined, a);

输出:

a = 1
b = 2
c = 3

在该示例中,我在this的调用中并不需要foo特别是任何内容,所以我使用了undefined。在调用对象的方法(例如math.add)时,最好使用该对象,因为this通常在调用中。

答案 1 :(得分:1)

math.js现在支持函数sum,使用值计算数组或矩阵:

var math = mathjs();

var result = math.sum([2,4,5]);
console.log(result); // 11

答案 2 :(得分:0)

使用Array.prototype.reduce

var result = intarray.reduce(function(prev, curr) { return math.add(prev, curr); }, 0);

有关Array Reduce的详细信息,请参阅https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce