2012-03-31 14 views
4

Unter der Annahme, Punkte werden mit Hilfe von JavaScript Array als [x,y] dargestellt, wie kann ich die + Bediener auf Punkte, so dass definieren:Wie man den + Operator auf Arrays in JavaScript neu definiert?

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

Sie dies nicht tun. Selbst wenn das Überladen von Operatoren möglich war und Sie dies ad hoc für vorhandene Typen tun könnten, sollten Sie das nicht tun, da es viel Code kaputt macht. – delnan

Antwort

5

JavaScript verfügt nicht über eine Einrichtung zur Überschreiben der integrierten in arithmetische Operatoren.

Es gibt einige begrenzte Tricks, die Sie durch Überschreiben der .valueOf() und .toString() Methoden ziehen können, aber ich kann mir nicht vorstellen, wie Sie tun könnten, was Sie fragen.

Sie könnten natürlich eine Funktion schreiben, um es zu tun.

0

Ich weiß, das ist nicht genau, was Sie wollen eine Lösung für Ihr Problem zu tun, sondern ist, so etwas zu tun:

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

Bitte beachten Sie, dass dieser Code nicht endgültig ist. Ich sehe einige Probleme:

  1. Der Anfangswert des Ergebnisses Array dynamisch sein sollte
  2. ich den Code nicht getestet haben, wenn die Arrays

Viel Glück nicht gleich lang sind!

+0

Hmm, nach Ihrem Ruf @Misha, müssen Sie schon über diese Lösung nachgedacht haben. : \ – Cybrix

1

Wie wäre es mit einer netten "Plus" -Methode? Diese kümmert sich nicht, wie viele Indizes entweder Array hat, aber alle, die nicht numerisch sind umgewandelt werden 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 
*/ 
Verwandte Themen