在没有循环的情况下向另一个向量添加向量

时间:2016-03-19 17:07:11

标签: javascript node.js

我有两个相同长度的Javascript向量a和b。我想把b添加到。显而易见的方法是:

for (i=0; i<a.length; ++i)
    a[i] += b[i]

但这需要一个循环。我能做到:

a.forEach(function(item,index) {
   a[index] += b[index]
})

但这很麻烦 - 它需要一个不需要的参数&#34; item&#34;。有更短的选择吗?也许使用一些外部库?

2 个答案:

答案 0 :(得分:2)

没有循环,没有内置的JS函数可以做到这一点。此外,任何实现此功能的库都将使用循环来执行此操作。

所以,写一个简短的实用函数,然后只要你想这样做就调用该函数。由于它不是本机JS功能,因此将在某处循环以实现此功能。如果你想&#34;隐藏&#34;循环,然后将它放在一个实用函数中,只需在需要时调用该函数。

// returns a new array that is the sum of the two vector arrays
function addVectors(a, b) {
   return a.map(function(item, index) {
       return item += b[index];
   });
}

或者,如果您想要修改一个阵列:

// add one vector to another, modifying the first one
function addToVector(a, b) {
    a.forEach(function(item, index) {
        a[index] += b[index];
    });
    return a;
}

或者,如果未使用的item参数由于某种原因而困扰您:

// add one vector to another, modifying the first one
function addToVector(a, b) {
    for (var i = 0; i < a.length; i++) {
        a[i] += b[i];
    }
    return a;
}

注意,所有这些函数都假设ab的长度相同。如果它们最终不是相同的长度并且您想要检查它,则必须指定您希望行为的内容。你可以抛出异常,只需添加共同的部分等等......

例如:

// returns a new array that is the sum of the two vector arrays
function addVectors(a, b) {
   if (a.length !== b.length) {
       throw new Error("Vector arrays must be the same length to add them");
   }
   return a.map(function(item, index) {
       return item += b[index];
   });
}

答案 1 :(得分:0)

你确定要在没有循环的情况下这样做吗?好吧:

a.forEach(function(currentElement, Index){
    b[Index] += currentElement;
});