Как переопределить оператор + для массивов в JavaScript? - PullRequest
4 голосов
/ 31 марта 2012

Если точки представлены с помощью JavaScript Array как [x,y], как я могу определить оператор + для таких точек, что:

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

Ответы [ 3 ]

5 голосов
/ 31 марта 2012

В JavaScript нет возможности переопределить встроенные арифметические операторы.

Есть некоторые ограниченные приемы, которые вы можете использовать, переопределив методы .valueOf() и .toString(), но я не могу себе представить,как вы могли бы делать то, что вы просите.

Конечно, вы могли бы написать функцию, чтобы сделать это.

1 голос
/ 31 марта 2012

Как насчет хорошего метода «плюс»? Это не волнует, сколько индексов имеет любой массив, но все, которые не являются числовыми, преобразуются в 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
*/
0 голосов
/ 31 марта 2012

Я знаю, что не совсем то, что вы хотите , но решение вашей проблемы - сделать что-то подобное:

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. Начальное значение массива результатов должно быть динамическим
  2. Я не проверял код, если массивы не равны по длине

Удачи!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...