1
votes

Comment puis-je obtenir une boucle et un filtre à la fois en Javascript

    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?


3 commentaires

document.write (nombre [i - 1] + nombre [i] + nombre [i + 1]);


@JacobSchneider mais attention à une exception hors limites!


compte [i - 1] || ""


4 Réponses :


2
votes

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.


6 commentaires

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.



2
votes

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
  }
}


1 commentaires

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.




1
votes

        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);


1 commentaires

Assurez-vous de vérifier les limites de votre index-1 et index + 1 ou vous obtiendrez une exception pour undefined.number