Как переопределить оператор + для массивов в JavaScript?
Предполагая, что точки представлены с использованием JavaScript Array
как [x,y]
как я могу определить +
оператор по точкам такой, что:
[1,2] + [5,10] == [6,12]
3 ответа
В JavaScript нет возможности переопределить встроенные арифметические операторы.
Есть несколько ограниченных трюков, которые вы можете использовать, переопределив .valueOf()
а также .toString()
методы, но я не могу представить, как вы могли бы сделать то, что вы просите.
Конечно, вы могли бы написать функцию для этого.
Как насчет хорошего метода "плюс"? Это не имеет значения, сколько индексов имеет любой массив, но все, которые не являются числовыми, преобразуются в 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
*/
Я знаю, что это не совсем то, что вы хотите сделать, но решение вашей проблемы - сделать что-то вроде этого:
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 );
Пожалуйста, обратите внимание, что этот код не является окончательным. Я вижу некоторые проблемы:
- Начальное значение массива результата должно быть динамическим
- Я не проверял код, если массивы не имеют одинаковую длину
Удачи!