1

我有一个包含八个值的数组。我有另一个具有相同数量值的数组。我可以简单地从彼此中减去这些数组吗?

这是一个例子:

var firstSet =[2,3,4,5,6,7,8,9]
var secondSet =[1,2,3,4,5,6,7,8]

firstSet - secondSet =[1,1,1,1,1,1,1,1] //I was hoping for this to be the result of a substraction, but I'm getting "undefined" instead of 1..

这应该如何正确完成?

4

5 回答 5

2

像这样:

var newArray = [];
for(var i=0,len=firstSet.length;i<len;i++)
  newArray.push(secondSet[i] - firstSet[i]);

请注意,它secondSet的数量应与firstSet

于 2012-08-15T08:43:07.773 回答
2

试试这个:

for (i in firstSet) {
    firstSet[i] -= secondSet[i];
}
于 2012-08-15T08:44:34.050 回答
0

逐元素减法应该起作用:

var result = [];

for (var i = 0, length = firstSet.length; i < length; i++) {
  result.push(firstSet[i] - secondSet[i]);
}

console.log(result);
于 2012-08-15T08:43:27.337 回答
0
var firstSet = [2,3,4,5,6,7,8,9]
var secondSet = [1,2,3,4,5,6,7,8]

var sub = function(f, s) {
    var st = [], l, i;
    for (i = 0, l = f.length; i < l; i++) {
        st[i] = f[i] - s[i];
    }

    return st;
}

console.log(sub(firstSet, secondSet));​
于 2012-08-15T08:44:53.680 回答
0

您所追求的是类似于 Haskell 的“zipWith”功能

"zipWith (-) xs ys",或者在 Javascript 语法中 "zipWith(function(a,b) { return a - b; }, xs, ys)" 返回一个数组 [(xs[0] - ys[0] ), (xs[1] - ys[1]), ...]

Underscore.js 库为这类事情提供了一些不错的功能。它没有 zipWith,但它有 "zip",它将一对数组 xs, ys 转换为一对数组 [[xs[0], ys[0]], [xs[1], ys[ 1]], ...],然后您可以将减法函数映射到:

_.zip(xs, ys).map(function(x) { return x[0] - x[1]; })

您可能会发现这很有趣https://github.com/documentcloud/underscore/issues/145

于 2012-08-15T09:37:17.517 回答