2012-03-31 12 views
4

点がIは、その点に+演算子を定義することができるか、[x,y]としてのJavaScript Arrayを使用して表されていると仮定すると:JavaScriptで配列の+演算子を再定義するにはどうすればよいですか?

[1,2] + [5,10] == [6,12] 
+1

あなたがいないに変換されているどのように多くの指標のいずれかのアレイ気にしません。演算子のオーバーロードが可能であっても、既存の型に対してアドホックな処理を行うことができたとしても、それは多くのコードを破るためではありません。 – delnan

答えて

5

JavaScriptは内蔵の算術演算子をオーバーライドするための機能を有していません。

.valueOf().toString()のメソッドをオーバーライドすることによって引き出すことのできるいくつかの限定されたトリックがありますが、あなたが求めていることをどうやってできるか想像できません。

もちろん、それを行う関数を書くことができます。

0

私はそれはあなたががやりたい正確に何ではありませんが、あなたの問題を解決するには、そのような何かを知っている:

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); 

このコードは最終的ではないことに注意してください。配列は同じ長さ

幸運でない場合、私は、コードをテストしていない結果配列の初期値は、動的

  • でなければなりません

    1. :私はいくつかの問題を参照してください!

  • +0

    ええと、あなたの評判@Mishaによれば、あなたはすでにその解決策について考えていたに違いありません。 :\ – Cybrix

    1

    「プラス」の方法はいかがですか? これは、持っている ますが、数値ではありませんそのいずれかが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 
    */ 
    
    関連する問題