0

我正在尝试在 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());
}
4

3 回答 3

4

更新:你说过你想math.add用所有的值调用一次,但我认为它不支持这样做。该函数的文档和来源都说它只支持两个参数,而不是无限的系列。

所以你不能一次完成所有的事情;你最好在解析时这样做:

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(或 shimed)的环境中:

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通常是调用中的内容。

于 2014-03-11T14:33:57.300 回答
1

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

var math = mathjs();

var result = math.sum([2,4,5]);
console.log(result); // 11
于 2014-04-15T07:40:08.783 回答
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

于 2014-03-11T14:34:15.920 回答