Как вычислить по модулю отрицательных целых чисел в JavaScript?

Я пытаюсь перебрать массив объектов jQuery, увеличивая или уменьшая на 1. Итак, для декрементирующей части я использую этот код:

var splitted_id = currentDiv.attr('id').split('_');
var indexOfDivToGo = parseInt(splitted_id[1]);
indexOfDivToGo = (indexOfDivToGo-1) % allDivs.length;
var divToGo = allDivs[indexOfDivToGo];

поэтому у меня есть 4 элемента с id:

div_0
div_1
div_2
div_3

Я ожидал, что он будет повторяться так же, как 3 - 2 - 1 - 0 - 3 - 2 - и т.д.

но он возвращает -1 после нуля, поэтому он застревает. Таким образом, он выполняет следующие действия:

3 - 2 - 1 - 0 - -1 - застрял

Я знаю, что могу исправить ошибку, изменив вторую строку моего кода на

indexOfDivToGo = (indexOfDivToGo-1 + allDivs.length) % allDivs.length;

но мне интересно, почему JavaScript не вычисляет отрицательные моды. Возможно, это поможет и другому кодеру.

Ответы

Ответ 1

Вы можете попробовать следующее: p -

Number.prototype.mod = function(n) {
    return ((this % n) + n) % n;
}

Отъезд this

Ответ 2

Большинство языков, которые наследуют от C, вернут отрицательный результат, если первый операнд по модулю отрицательный, а второй положительный. Я не знаю, почему это решение было принято изначально. Вероятно, ближе всего к тому, что процессоры в то время делали в сборке. В любом случае, с тех пор ответ на "почему", скорее всего, "потому что это то, что программисты, знающие" С ", ожидают".

Ссылка MDC содержит указатель на предложение ввести надлежащее мод. Но даже это сохранит существующий оператор % (который они называют "остатком", чтобы лучше различать их) и ввести новую нотацию инфиксного слова a mod b. Предложение датируется 2011 годом, и я не знаю последних событий в этом направлении.