javascript - Problème de traversée js ?
大家讲道理
大家讲道理 2017-06-30 09:57:33
0
5
684

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 ?

大家讲道理
大家讲道理

光阴似箭催人老,日月如移越少年。

répondre à tous(5)
伊谢尔伦

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

Ty80

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

伊谢尔伦

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

刘奇

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

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()
    }
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!