Comment calculer modulo d'entiers négatifs en JavaScript?
j'essaie d'itérer sur un tableau d'objets jQuery, en incrémentant ou décrémentant par 1. Donc, pour la partie décrémentant, j'utilise ce code:
var splitted_id = currentDiv.attr('id').split('_');
var indexOfDivToGo = parseInt(splitted_id[1]);
indexOfDivToGo = (indexOfDivToGo-1) % allDivs.length;
var divToGo = allDivs[indexOfDivToGo];
j'ai donc 4 éléments avec id:
div_0
div_1
div_2
div_3
je m'attendais à itérer comme 3 - 2 - 1 - 0 - 3 - 2 - etc..
mais il retourne -1 après le zéro, donc il est coincé. Ainsi, il est itératif:
3 - 2 - 1 - 0 - -1 - stuck
je sais que je peux probablement le réparer en changeant le deuxième ligne de mon code
indexOfDivToGo = (indexOfDivToGo-1 + allDivs.length) % allDivs.length;
mais je me demande pourquoi JavaScript ne calcule pas des mods négatifs. Ça aidera peut-être un autre codeur.
2 réponses
Vous pouvez essayer ceci :p-
Number.prototype.mod = function(n) {
return ((this % n) + n) % n;
}
la plupart des langues héritées de C retourneront un résultat négatif si le premier opérande d'une opération modulo est négatif et le second est positif. Je ne sais pas pourquoi cette décision a été prise à l'origine. Probablement plus proche de ce que les processeurs de l'époque faisaient en assemblage. En tout cas, depuis lors, la réponse à "pourquoi" est probablement", car c'est ce que les programmeurs qui connaissent C attendre".
référence MDC contient un pointeur vers une proposition visant à introduire un approprié mod opérateur. Mais même cela maintiendrait l'existant!--0 -- > opérateur (qu'ils appellent "reste" pour mieux les distinguer) et introduire une nouvelle notation infix word a mod b
. La proposition date de 2011, et je ne connais pas de développements plus récents dans cette direction.