const count = [
{number: 1},
{number: 2},
{number: 3},
{number: 4},
{number: 5},
{number: 6},
{number: 7},
{number: 8},
{number: 9},
{number: 10},
{number: 11},
{number: 12},
{number: 13},
{number: 14},
{number: 15}
];
for(let i = 0;i < count.length; i++) {
document.write(count[i].number);
}
Si le numéro principal que je veux sortir de la boucle est 5. Mais je veux écrire un au-dessus de 5 et un sous 5. Donc 456. Comment puis-je y parvenir?
4 Réponses :
En supposant que l ' aiguille est unique, vous pouvez .filter les nombres souhaités, puis .forEach pour les imprimer.
const needle = 5
const haystack = [
{number: 1},
{number: 2},
{number: 3},
{number: 4},
{number: 5},
{number: 6},
{number: 7},
{number: 8},
{number: 9},
{number: 10},
{number: 11},
{number: 12},
{number: 13},
{number: 14},
{number: 15}
]
haystack
.sort((a, b) => a.number - b.number) // skip this if haystack is already sorted.
.filter(el => [needle - 1, needle, needle + 1].includes(el.number))
.forEach(el => {
document.write(el.number)
})
Notez que vous devez vous prémunir contre aiguille = 0 qui n'a pas de -1 et aiguille = 15 qui n'a pas +1.
Plus généralement, je crois que leur requête est "J'ai besoin d'obtenir le numéro X et d'afficher les valeurs à x-1 et x + 1"
@Our_Benefactors Ah, c'est vrai. Édité.
Pas besoin de filtre ici. pourquoi ne pas le faire simplement avec un forEach?
@CodeManiac Vous voulez dire utiliser un if dans forEach ?
@NikKyriakides oui. il n'y a pas besoin d'une boucle supplémentaire
@CodeManiac Parce que je trouve l'utilisation du filtre plus idiomatique. De plus, je ne boucle pas deux fois sur meule de foin . Le forEach ne boucle que sur les 3 éléments filtrés.
Afin de filtrer le nombre souhaité, vous pouvez utiliser une instruction if pour vérifier si le numéro de l'objet actuel count [i] .number est la valeur que vous voulez, et si c'est le cas, imprimez ses valeurs associées.
Vous pouvez accéder à l'objet avant et après en changeant votre valeur de i . En utilisant i-1 , vous obtiendrez l'élément avant votre valeur actuelle. De même, en utilisant i + 1 , vous accéderez à l'objet après votre valeur actuelle.
Enfin, vous devez vérifier la valeur de i pour vous assurer qu'il entre dans le tableau. Par exemple, si vous avez choisi de trouver le numéro 1 , il n'a pas d'objet avant, et vous devez donc vérifier ce cas!
Voir l'exemple de travail ci-dessous:
const count = [
{number: 1},
{number: 2},
{number: 3},
{number: 4},
{number: 5},
{number: 6},
{number: 7},
{number: 8},
{number: 9},
{number: 10},
{number: 11},
{number: 12},
{number: 13},
{number: 14},
{number: 15}
];
const toFind = 5;
for(let i = 0; i < count.length; i++) {
if(count[i].number == toFind) {
if(i-1 >= 0) console.log(count[i-1].number);
console.log(count[i].number);
if(i+1 < count.length) console.log(count[i+1].number);
break; // complete loop cycle
}
}
C'est la solution la plus efficace du point de vue algorithmique. Une petite optimisation à faire est de casser; à la fin de l'instruction if () , car vous avez déjà trouvé votre numéro et itérer le reste du tableau est inutile.
const count = [
{ number: 1 },
{ number: 2 },
{ number: 3 },
{ number: 4 },
{ number: 5 },
{ number: 6 },
{ number: 7 },
{ number: 8 },
{ number: 9 },
{ number: 10 },
{ number: 11 },
{ number: 12 },
{ number: 13 },
{ number: 14 },
{ number: 15 }
];
var index = count.findIndex(item => item.number === 5);
document.write(count[index - 1].number);
document.write(count[index].number);
document.write(count[index + 1].number);
Assurez-vous de vérifier les limites de votre index-1 et index + 1 ou vous obtiendrez une exception pour undefined.number
document.write (nombre [i - 1] + nombre [i] + nombre [i + 1]);@JacobSchneider mais attention à une exception hors limites!
compte [i - 1] || ""