点がIは、その点に+
演算子を定義することができるか、[x,y]
としてのJavaScript Array
を使用して表されていると仮定すると:JavaScriptで配列の+演算子を再定義するにはどうすればよいですか?
[1,2] + [5,10] == [6,12]
点がIは、その点に+
演算子を定義することができるか、[x,y]
としてのJavaScript Array
を使用して表されていると仮定すると:JavaScriptで配列の+演算子を再定義するにはどうすればよいですか?
[1,2] + [5,10] == [6,12]
JavaScriptは内蔵の算術演算子をオーバーライドするための機能を有していません。
.valueOf()
と.toString()
のメソッドをオーバーライドすることによって引き出すことのできるいくつかの限定されたトリックがありますが、あなたが求めていることをどうやってできるか想像できません。
もちろん、それを行う関数を書くことができます。
私はそれはあなたががやりたい正確に何ではありませんが、あなたの問題を解決するには、そのような何かを知っている:
var arrayAdd = function() {
var arrays = arguments,
result = [0, 0];
for(var i = 0, s = arrays.length; i < s; i++) {
for(var j = 0, t = arrays[ i ].length; j < t; j++) {
result[ j ] += parseInt(arrays[ i ].shift(), 10);
}
}
return result;
};
var sum = arrayAdd([1,2], [5,10]); //Should return [6, 12]
console.log(sum);
このコードは最終的ではないことに注意してください。配列は同じ長さ
幸運でない場合、私は、コードをテストしていない結果配列の初期値は、動的
ええと、あなたの評判@Mishaによれば、あなたはすでにその解決策について考えていたに違いありません。 :\ – Cybrix
「プラス」の方法はいかがですか? これは、持っている ますが、数値ではありませんそのいずれかが0
Array.prototype.plus= function(arr){
var L= Math.max(this.length,arr.length);
while(L){
this[--L]= (+this[L] || 0)+ (+arr[L] || 0);
}
return this;
};
[1, 2].plus([5, 10])
/* returned value: (Array)
[6,12]
*/
[1, 2].plus([5, 10]).plus(['cat',10,5])
/* returned value: (Array)
6,22,5
*/
あなたがいないに変換されているどのように多くの指標のいずれかのアレイ気にしません。演算子のオーバーロードが可能であっても、既存の型に対してアドホックな処理を行うことができたとしても、それは多くのコードを破るためではありません。 – delnan