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]
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]
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.
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:
Viel Glück nicht gleich lang sind!
Hmm, nach Ihrem Ruf @Misha, müssen Sie schon über diese Lösung nachgedacht haben. : \ – Cybrix
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
*/
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