2016-03-19 12 views
-1

同じ長さの2つのJavaScriptベクトルaとbがあります。私はbをaに追加したい。明らかな方法は:ループなしで別のベクトルにベクトルを追加する

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

ですが、これにはループが必要です。私が行うことができます。

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

が、これは面倒である - それは不要なパラメータ「の項目を」必要とします。より短い選択肢がありますか?たぶんいくつかの外部ライブラリを使用して?

+2

ループの問題は何ですか?単純なループで作業を行う場合、ライブラリはコードにオーバーヘッドを追加します。とにかく、ライブラリの "ショートカット"はいずれもフードの下でループを使用します。 – Andy

+1

このpython機能が必要ですか?http://stackoverflow.com/questions/16568056/python-nested-list-comprehension-with-two-lists?私はそれが利用できないと思う:http://es6-features.org/。 – Sombriks

+0

@Sombriksはい、これが私の意図です。 –

答えて

0

本当にループなしでしたいですか? OK:いいえ:

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

これは、OPが質問しているものとは異なる 'b'ベクトル配列を変更します。 – jfriend00

2

ルーピングなしでこれを行う組み込みJS関数はありません。さらに、これを実装するライブラリは、それを行うためにループを使用します。

だから、あなたに短いユーティリティ関数を書いて、それをしたいときはいつもその関数を呼び出してください。ネイティブJSの機能ではないため、これを実装するためにどこかにループすることになります。ルーピングを「隠す」ためには、それをユーティリティ関数に入れ、必要なときに関数を呼び出すだけです。あなたがしたい場合は、1つのアレイが所定の位置に修正

// 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]; 
    }); 
} 
関連する問題