Maison interface Web js tutoriel Explication détaillée de la raison pour laquelle la méthode de traversée est préférée au code de boucle en JavaScript

Explication détaillée de la raison pour laquelle la méthode de traversée est préférée au code de boucle en JavaScript

Jul 26, 2017 pm 05:04 PM
javascript js 遍历

Priorisez l'utilisation de méthodes de parcours plutôt que de boucles

Lors de l'utilisation de boucles, il est facile de violer le principe DRY (Don't Repeat Yourself). En effet, nous choisissons généralement la méthode copier-coller pour éviter d’écrire à la main des paragraphes de déclarations circulaires. Mais cela entraînera de nombreuses duplications de code dans le code, et les développeurs « réinventeront la roue » sans aucun sens. Plus important encore, il est facile de négliger les détails de la boucle lors du copier-coller, tels que la valeur de l'index de départ, la condition de fin, etc.

Par exemple, la boucle for suivante a ce problème, en supposant que n est la longueur de l'objet de collection :


for (var i = 0; i <= n; i++) { ... }
// 终止条件错误,应该是i < n
for (var i = 1; i < n; i++) { ... }
// 起始变量错误,应该是i = 0
for (var i = n; i >= 0; i--) { ... }
// 起始变量错误,应该是i = n - 1
for (var i = n - 1; i > 0; i--) { ... }
// 终止条件错误,应该是i >= 0
Copier après la connexion

On peut le voir dans quelques détails de la boucle Il est facile de se tromper. Grâce à la fermeture fournie par JavaScript (voir point 11), les détails de la boucle peuvent être encapsulés pour être réutilisés. En fait, ES5 propose quelques méthodes pour résoudre ce problème. Parmi eux, Array.prototype.forEach est le plus simple. En l'utilisant, nous pouvons écrire la boucle comme ceci :


// 使用for循环
for (var i = 0, n = players.length; i < n; i++) {
  players[i].score++;
}

// 使用forEach
players.forEach(function(p) {
  p.score++;
});
Copier après la connexion

En plus de parcourir l'objet de collection, un autre modèle courant consiste à parcourir chaque élément de la collection d'origine. Effectuez certaines opérations sur les éléments, puis obtenez un nouvel ensemble. Nous pouvons également utiliser la méthode forEach pour implémenter ce qui suit :


// 使用for循环
var trimmed = [];
for (var i = 0, n = input.length; i < n; i++) {
  trimmed.push(input[i].trim());
}

// 使用forEach
var trimmed = [];
input.forEach(function(s) {
  trimmed.push(s.trim());
});
Copier après la connexion

Cependant, en raison de cette méthode de. conversion d'un ensemble Le modèle de mappage d'une autre collection est très courant, et ES5 fournit également la méthode Array.prototype.map pour rendre le code plus simple et plus élégant :


var trimmed = input.map(function(s) {
  return s.trim();
});
Copier après la connexion

De plus, il existe un modèle courant consistant à filtrer la collection selon certaines conditions, puis à obtenir un sous-ensemble de la collection originale. Array.prototype.filter est fourni dans ES5 pour implémenter ce modèle. Cette méthode accepte un Predicate comme paramètre, qui est une fonction qui renvoie true ou false : renvoyer true signifie que l'élément sera conservé dans la nouvelle collection ; renvoyer false signifie que l'élément n'apparaîtra pas dans la nouvelle collection. Par exemple, nous utilisons le code suivant pour filtrer les prix des produits et conserver uniquement les produits dont les prix se situent dans la plage [min, max] :


listings.filter(function(listing) {
  return listing.price >= min && listing.price <= max;
});
Copier après la connexion

Bien sûr, ce qui précède méthode Est disponible dans les environnements prenant en charge ES5. Dans d'autres environnements, nous avons deux options : 1. Utiliser des bibliothèques tierces, telles que le trait de soulignement ou lodash, qui fournissent un certain nombre de méthodes courantes pour gérer les objets et les collections. 2. Définissez-le selon vos besoins.

Par exemple, définissez la méthode suivante pour obtenir les éléments précédents de l'ensemble en fonction d'une certaine condition :


function takeWhile(a, pred) {
  var result = [];
  for (var i = 0, n = a.length; i < n; i++) {
    if (!pred(a[i], i)) {
      break;
    }
    result[i] = a[i];
  }
  return result;
}

var prefix = takeWhile([1, 2, 4, 8, 16, 32], function(n) {
  return n < 10;
}); // [1, 2, 4, 8]
Copier après la connexion

Afin de mieux réutiliser cette méthode, nous pouvons la définir sur l'objet Array.prototype Pour des effets spécifiques, veuillez vous référer au point 42.


Array.prototype.takeWhile = function(pred) {
  var result = [];
  for (var i = 0, n = this.length; i < n; i++) {
    if (!pred(this[i], i)) {
      break;
    }
    result[i] = this[i];
  }
  return result; 
};

var prefix = [1, 2, 4, 8, 16, 32].takeWhile(function(n) {
  return n < 10;
}); // [1, 2, 4, 8]
Copier après la connexion

Il n'y a qu'une seule situation dans laquelle utiliser une boucle est préférable à l'utilisation d'une fonction de traversée : lorsque vous devez utiliser break et continue. Par exemple, il y aura des problèmes lors de l'utilisation de forEach pour implémenter la méthode takeWhile ci-dessus. Comment doit-elle être implémentée lorsque le prédicat n'est pas satisfait ?


function takeWhile(a, pred) {
  var result = [];
  a.forEach(function(x, i) {
    if (!pred(x)) {
      // ?
    }
    result[i] = x;
  });
  return result;
}
Copier après la connexion

On peut utiliser une exception interne pour porter le jugement, mais c'est aussi un peu maladroit et inefficace :


function takeWhile(a, pred) {
  var result = [];
  var earlyExit = {}; // unique value signaling loop break
  try {
    a.forEach(function(x, i) {
      if (!pred(x)) {
        throw earlyExit;
      }
      result[i] = x;
    });
  } catch (e) {
    if (e !== earlyExit) { // only catch earlyExit
      throw e;
    }
  }
  return result;
}
Copier après la connexion

Mais après avoir utilisé forEach, le code est encore plus verbeux qu'avant de l'utiliser. C'est évidemment problématique. Pour ce problème, ES5 fournit toutes les méthodes pour gérer les boucles qui se terminent prématurément. Leur utilisation est la suivante :


[1, 10, 100].some(function(x) { return x > 5; }); // true
[1, 10, 100].some(function(x) { return x < 0; }); // false

[1, 2, 3, 4, 5].every(function(x) { return x > 0; }); // true
[1, 2, 3, 4, 5].every(function(x) { return x < 3; }); // false
Copier après la connexion

Les deux méthodes sont un court-circuit. méthode : tant qu'un élément renvoie true dans le prédicat de la méthode some, alors some retournera ; tant que n'importe quel élément renvoie false dans le prédicat de la méthode each, alors la méthode each renverra également false .

Par conséquent, takeWhile peut être implémenté comme suit :


function takeWhile(a, pred) {
  var result = [];
  a.every(function(x, i) {
    if (!pred(x)) {
      return false; // break
    }
    result[i] = x;
    return true; // continue
  });
  return result;
}
Copier après la connexion

En fait, c'est l'idée de la programmation fonctionnelle. En programmation fonctionnelle, vous voyez rarement des boucles for ou while explicites. Les détails des boucles sont joliment encapsulés.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Commandes de chat et comment les utiliser
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Recommandé : Excellent projet de détection et de reconnaissance des visages open source JS Recommandé : Excellent projet de détection et de reconnaissance des visages open source JS Apr 03, 2024 am 11:55 AM

La technologie de détection et de reconnaissance des visages est déjà une technologie relativement mature et largement utilisée. Actuellement, le langage d'application Internet le plus utilisé est JS. La mise en œuvre de la détection et de la reconnaissance faciale sur le front-end Web présente des avantages et des inconvénients par rapport à la reconnaissance faciale back-end. Les avantages incluent la réduction de l'interaction réseau et de la reconnaissance en temps réel, ce qui réduit considérablement le temps d'attente des utilisateurs et améliore l'expérience utilisateur. Les inconvénients sont les suivants : il est limité par la taille du modèle et la précision est également limitée ; Comment utiliser js pour implémenter la détection de visage sur le web ? Afin de mettre en œuvre la reconnaissance faciale sur le Web, vous devez être familier avec les langages et technologies de programmation associés, tels que JavaScript, HTML, CSS, WebRTC, etc. Dans le même temps, vous devez également maîtriser les technologies pertinentes de vision par ordinateur et d’intelligence artificielle. Il convient de noter qu'en raison de la conception du côté Web

Outils essentiels pour l'analyse boursière : découvrez les étapes pour dessiner des graphiques en bougies avec PHP et JS Outils essentiels pour l'analyse boursière : découvrez les étapes pour dessiner des graphiques en bougies avec PHP et JS Dec 17, 2023 pm 06:55 PM

Outils essentiels pour l'analyse boursière : découvrez les étapes pour dessiner des graphiques en bougies en PHP et JS. Des exemples de code spécifiques sont nécessaires. Avec le développement rapide d'Internet et de la technologie, le trading d'actions est devenu l'un des moyens importants pour de nombreux investisseurs. L'analyse boursière est une partie importante de la prise de décision des investisseurs, et les graphiques en bougies sont largement utilisés dans l'analyse technique. Apprendre à dessiner des graphiques en bougies à l'aide de PHP et JS fournira aux investisseurs des informations plus intuitives pour les aider à prendre de meilleures décisions. Un graphique en chandeliers est un graphique technique qui affiche les cours des actions sous forme de chandeliers. Il montre le cours de l'action

WebSocket et JavaScript : technologies clés pour mettre en œuvre des systèmes de surveillance en temps réel WebSocket et JavaScript : technologies clés pour mettre en œuvre des systèmes de surveillance en temps réel Dec 17, 2023 pm 05:30 PM

WebSocket et JavaScript : technologies clés pour réaliser des systèmes de surveillance en temps réel Introduction : Avec le développement rapide de la technologie Internet, les systèmes de surveillance en temps réel ont été largement utilisés dans divers domaines. L'une des technologies clés pour réaliser une surveillance en temps réel est la combinaison de WebSocket et de JavaScript. Cet article présentera l'application de WebSocket et JavaScript dans les systèmes de surveillance en temps réel, donnera des exemples de code et expliquera leurs principes de mise en œuvre en détail. 1. Technologie WebSocket

Java comment parcourir un dossier et obtenir tous les noms de fichiers Java comment parcourir un dossier et obtenir tous les noms de fichiers Mar 29, 2024 pm 01:24 PM

Java est un langage de programmation populaire doté de puissantes capacités de gestion de fichiers. En Java, parcourir un dossier et obtenir tous les noms de fichiers est une opération courante, qui peut nous aider à localiser et traiter rapidement les fichiers dans un répertoire spécifique. Cet article explique comment implémenter une méthode permettant de parcourir un dossier et d'obtenir tous les noms de fichiers en Java, et fournit des exemples de code spécifiques. 1. Utilisez la méthode récursive pour parcourir le dossier. Nous pouvons utiliser la méthode récursive pour parcourir le dossier. La méthode récursive est un moyen de s'appeler, qui peut parcourir efficacement le dossier.

Conseils de développement PHP et JS : maîtrisez la méthode de création de graphiques en bougies boursières Conseils de développement PHP et JS : maîtrisez la méthode de création de graphiques en bougies boursières Dec 18, 2023 pm 03:39 PM

Avec le développement rapide de la finance sur Internet, l'investissement en actions est devenu le choix de plus en plus de personnes. Dans le trading d'actions, les graphiques en bougies sont une méthode d'analyse technique couramment utilisée. Ils peuvent montrer l'évolution des cours des actions et aider les investisseurs à prendre des décisions plus précises. Cet article présentera les compétences de développement de PHP et JS, amènera les lecteurs à comprendre comment dessiner des graphiques en bougies boursières et fournira des exemples de code spécifiques. 1. Comprendre les graphiques en bougies boursières Avant de présenter comment dessiner des graphiques en bougies boursières, nous devons d'abord comprendre ce qu'est un graphique en bougies. Les graphiques en chandeliers ont été développés par les Japonais

Tutoriel JavaScript simple : Comment obtenir le code d'état HTTP Tutoriel JavaScript simple : Comment obtenir le code d'état HTTP Jan 05, 2024 pm 06:08 PM

Tutoriel JavaScript : Comment obtenir le code d'état HTTP, des exemples de code spécifiques sont requis Préface : Dans le développement Web, l'interaction des données avec le serveur est souvent impliquée. Lors de la communication avec le serveur, nous devons souvent obtenir le code d'état HTTP renvoyé pour déterminer si l'opération a réussi et effectuer le traitement correspondant en fonction de différents codes d'état. Cet article vous apprendra comment utiliser JavaScript pour obtenir des codes d'état HTTP et fournira quelques exemples de codes pratiques. Utilisation de XMLHttpRequest

La relation entre js et vue La relation entre js et vue Mar 11, 2024 pm 05:21 PM

La relation entre js et vue : 1. JS comme pierre angulaire du développement Web ; 2. L'essor de Vue.js en tant que framework front-end ; 3. La relation complémentaire entre JS et Vue ; Vue.

Comment obtenir facilement le code d'état HTTP en JavaScript Comment obtenir facilement le code d'état HTTP en JavaScript Jan 05, 2024 pm 01:37 PM

Introduction à la méthode d'obtention du code d'état HTTP en JavaScript : Dans le développement front-end, nous devons souvent gérer l'interaction avec l'interface back-end, et le code d'état HTTP en est une partie très importante. Comprendre et obtenir les codes d'état HTTP nous aide à mieux gérer les données renvoyées par l'interface. Cet article explique comment utiliser JavaScript pour obtenir des codes d'état HTTP et fournit des exemples de code spécifiques. 1. Qu'est-ce que le code d'état HTTP ? Le code d'état HTTP signifie que lorsque le navigateur lance une requête au serveur, le service

See all articles