Maison  >  Questions et réponses  >  le corps du texte

javascript - Problème de traversée js ?

Je dois savoir s'il y a des valeurs différentes dans le tableau. S'il existe, exécutez la fonction x. S'il n'existe pas, exécutez la fonction y. Mais en utilisant une boucle for, si elle rencontre la même chose au début, elle exécutera y, et elle n'exécutera pas x jusqu'à ce qu'elle en rencontre une autre. Comment lui faire exécuter la fonction correspondante après les avoir toutes parcourues ?

大家讲道理大家讲道理2668 Il y a quelques jours688

répondre à tous(5)je répondrai

  • 伊谢尔伦

    伊谢尔伦2017-06-30 09:59:33

    Utilisez Array.prototype.every() ou Array.prototype.some()

    répondre
    0
  • PHP中文网

    PHP中文网2017-06-30 09:59:33

    1. Utilisez la méthode ES5 array.every, qui exécute une fonction sur chaque élément du tableau. Lorsque tous les résultats de l'exécution de la fonction sont vrais, le résultat final est vrai, sinon il se terminera prématurément et deviendra faux.

    2. En utilisant une boucle for, vous avez besoin d'une variable pour enregistrer la valeur du premier élément du tableau, puis démarrez la boucle lorsque vous constatez qu'il y a un élément dans le tableau qui n'est pas égal à votre variable. peut déterminer qu'il est temps d'exécuter X (cela Vous pouvez le casser quand); sinon, il n'y a pas de valeurs différentes dans le tableau, exécutez Y

    En fait, la méthode 1 nécessite également cette variable

    .

    3. Utilisez la méthode ES5 array.reduce, qui accepte deux éléments du tableau à la fois. Vous pouvez comparer directement si les deux éléments sont égaux, tant qu'ils ne sont pas égaux, c'est Y.

    .

    [1,1,1,1,4,1].reduce(function (a,b) {
        console.log(a,b, a === b);
        // 返回后一个元素
        return b;
    })

    Mais cette méthode ne peut pas échouer

    répondre
    0
  • 伊谢尔伦

    伊谢尔伦2017-06-30 09:59:33

    Ajoutez une variable avant for, modifiez-la si vous la rencontrez dans for, puis si après for

    répondre
    0
  • 怪我咯

    怪我咯2017-06-30 09:59:33

    Si vous utilisez une boucle for, vous devez définir une variable comme indicateur à l'extérieur de for :

    const arr = [1, 2, 3, 5, 6, 6 , 7];
    let has = false;
    for(let i = 0; i < arr.length; i++) {
        if (arr.indexOf(arr[i]) !== i) {
            has = true;
            break;
        }
    };
    if (has) {
        console.log('x');
    } else {
        console.log('y');
    }

    Si ES6 est pris en charge, vous pouvez utiliser Set pour dédupliquer le tableau, puis déterminer la longueur des deux tableaux :

    const arr = [1, 2, 3, 5, 6, 6, 7];
    const arr1 = Array.from(new Set(arr));
    console.log(arr.length === arr1.length);

    répondre
    0
  • 欧阳克

    欧阳克2017-06-30 09:59:33

    La description de "il existe des valeurs différentes" est un peu vague. Je crois comprendre qu'il y a une valeur dans le tableau qui est différente des autres valeurs.

    1. // 比较方式可控
      if (arr.some(el => el !== arr[0])) {
        x()
      } else {
        y()
      }
    2. // 比较方式不可控,不支持对象比较,无论如何都会遍历完数组
      if (new Set(arr).size > 1) {
        x()
      } else {
        y()
      }
    3. // 比较方式可控,啰嗦但效率快
      for (var i = 1; i < arr.length; i += 1) {
        if (arr[i] !== arr[0]) {
          x()
          break
        }
      }
      if (i < arr.length) {
        y()
      }

    répondre
    0
  • Annulerrépondre