Disons que j'ai un tableau de taille n. Maintenant, quand obtenir un index i qui peut être dans la plage de [-n; 2n-1] Je souhaite indexer le tableau comme suit
Les flèches indiquent quel élément doit être retourné si je passe en dessous de 0 (jaune) ou au-dessus de n - 1 (bleu)
3 Réponses :
function mirrorArr(arr) {
let newArr = [];
newArr.length = arr.length * 3;
for(let i = 0; i < arr.length; i++) {
newArr[-arr[i]-1] = arr[i];
newArr[i] = arr[i];
newArr[i+arr.length] = arr.length-i-1;
}
return newArr;
}
let arr = [0, 1, 2, 3, 4];
let mirroredArr = mirrorArr(arr);
console.log(mirroredArr[-5]);
something like this does the trick
Supposons que votre tableau de valeurs possibles soit de longueur n (dans notre cas, [0, 1, 2, 3, 4] a une longueur de 5). La longueur totale du miroir sera de longueur 2n - 1:
possibleIndex = ((v + n - 1) % 2n - 1) if (possibleIndex >= n) actualIndex = possibleIndex - n + 1 else possibleIndex = actualIndex = n = possibleIndex
Maintenant, en supposant que le tableau de valeurs à l'index 0 a le milieu du miroir (0), vous devez travailler avec arithmétique modulaire, avec la formule de
result[v] = possibleValues[((v + n - 1) % 2n - 1)]
maintenant, puisque votre tableau réel ressemble à [0, 1, 2, 3, 4], vous devez convertir cet index utilisé à valeurs possibles à quelque chose qui est plus utile pour votre tableau actuel:
possibleValues = [4, 3, 2, 1, 0, 1, 2, 3, 4]
Pour obtenir le résultat attendu, utilisez l'option ci-dessous en utilisant l'opérateur de propagation et la méthode de tableau inversé
var arrOne = [0,1,2,3,4]; var result = [] var revArr = [...arrOne].reverse() result = [...revArr,...arrOne, ...revArr] console.log(result)
La taille du tableau est-elle toujours de 5? Le reproduisez-vous toujours dans un tableau de 15 éléments?
non, la taille du tableau est arbitraire, mais elle est donnée
Le miroir est-il toujours 3x la taille du tableau alors?
oui si la taille est n, la plage est [-n; 2n-1]
Cela dépend de ce que vous entendez par "toute manière intelligente" Vous pouvez certainement le faire avec quelques instructions
if.J'utilise ceci afin d'indexer dans une image 2D (une fois pour l'axe x et une fois pour l'axe y). Donc, en fonction de la taille de l'image, je ne veux pas appeler quelques instructions if pour chaque pixel.
veuillez partager le code de ce que vous avez essayé jusqu'à présent