Maison  >  Article  >  interface Web  >  Sujet JavaScript 9 : Recherche d'éléments spécifiés dans un tableau

Sujet JavaScript 9 : Recherche d'éléments spécifiés dans un tableau

coldplay.xixi
coldplay.xixiavant
2021-03-12 10:13:332997parcourir

Sujet JavaScript 9 : Recherche d'éléments spécifiés dans un tableau

Répertoire d'articles

    • 1. findIndex et findLastIndex
        • 1.1 findIndex
        • 1.2 findLastIndex
        • 1.3 Fusionner findIndex et findLastIndex
    • 2. sortIndex
        • 2.1 Traversée
        • 2.2 Dichotomie
    • 3. lastIndexOf
        • 3.1 Première version d'implémentation d'indexOf
        • 3.2 Première version commune d'indexOf et lastIndexOf
        • 3.3 indexOf et lastIndexOf Universal Deuxième édition
    • La référence
    • est écrite à la fin

(Recommandation d'apprentissage gratuite : tutoriel vidéo javascript)

1. findIndex et findLastIndex

1.1 findIndex

La méthode findIndex() renvoie l'index du premier élément du tableau qui satisfait à la fonction de test fournie. Si l'élément correspondant n'est pas trouvé, -1 est renvoyé.

const array1 = [5, 12, 8, 130, 44];const isLargeNumber = (element) => element > 13;console.log(array1.findIndex(isLargeNumber));// expected output: 3

Implémentation

Array.prototype.newFindIndex = function(callback) {
  const _arr = this;
  const len = _arr.length;
  for (let i = 0; i  element > 13;console.log(array1.newFindIndex(isLargeNumber));// 3

1.2 findLastIndex

De même, lorsque nous regardons en arrière pour trouver la première méthode qui satisfait à la condition, nous pouvons écrire comme ceci :

Array.prototype.newFindlastIndex = function(callback) {
  const _arr = this;
  const len = _arr.length;
  for (let i = len - 1; i >= 0; i--) {
    if (callback(_arr[i], i, _arr)) {
      return i;
    }
  }
  return -1;};const array1 = [5, 12, 8, 130, 44];const isLargeNumber = (element) => element > 13;console.log(array1.newFindlastIndex(isLargeNumber));// 4

Le code ci-dessus est très similaire à la recherche avant, mais ne modifie que les conditions de parcours.

1.3 Fusionner findIndex et findLastIndex

Comme vous pouvez le voir, à l'exception des conditions différentes de la boucle, les deux méthodes sont presque identiques En nous référant à lodash, nous allons simplifier les deux méthodes

/**
 * @private
 * @param {Array} array The array to inspect.
 * @param {Function} predicate The function invoked per iteration.
 * @param {boolean} [fromRight] 从右向左查找
 * @returns {number} 返回第一个符合条件元素的下标或-1
 */function baseFindIndex(array, predicate, fromRight) {
  const { length } = array;
  let index = fromRight ? length : -1; // 确定下标的边界

  while (fromRight ? index-- : ++index Regardons son frère - <p> l'idée est d'utiliser les différents paramètres passés pour renvoyer différentes fonctions. <code>underscore</code></p><pre class="brush:php;toolbar:false">function createIndexFinder(dir) {
  return function(array, predicate, context) {
    const { length } = array;
    var index = dir > 0 ? 0 : length - 1;

    for (; index >= 0 && index À propos de <p> Nous avons terminé ~, jetons un coup d'œil aux nouvelles scènes et implémentations ! <code>findIndex</code></p><p><img src="https://img.php.cn/upload/article/000/000/052/c975230185fb614ade747b6d7f8688db-0.jpg" alt="Sujet JavaScript 9 : Recherche déléments spécifiés dans un tableau"></p><p>2. sortIndex<strong></strong></p> Trouvez la position correspondant à <p> dans un tableau trié, c'est-à-dire qu'il est garanti de être inséré dans le tableau Après cela, il conserve toujours un état ordonné. <code>value</code></p><pre class="brush:php;toolbar:false">const arr = [1, 3, 5];sortedIndex(arr, 0); // 0// 不需要插入arr
Alors comment y parvenir ?

2.1 Traversée

Tout le monde peut penser à la traversée, même si ce n'est pas forcément la solution optimale :

function sortIndex(array, value) {
  for (let i = 0; i  value) {
      return i;
    }
  }
  return array.length;}
2.2 Dichotomie

function sortIndex(array, value) {
  let low = 0,
    high = array.length;
  while (low 

3. indexOf et lastIndexOf

  •  : Renvoie l'index indexOf() first où un élément donné peut être trouvé dans le tableau, ou -1 s'il n'existe pas. Effectuez une recherche depuis l'avant du tableau vers l'arrière, en commençant par fromIndex.
  •  : Renvoie l'index du dernier lastIndexOf() de l'élément spécifié dans le tableau, ou -1 s'il n'existe pas. Effectuez une recherche vers l'avant à partir de l'arrière du tableau, en commençant par fromIndex.
  • La première version de l'implémentation 3.1 d'indexOf
function indexOf(array, value) {
  for (let i = 0; i <h4>emmmm...Après avoir vu l'implémentation de findIndex et lastFindIndex, indexOf devrait également être propre et bien rangé~</h4><p> 3.2 IndexOf et lastIndexOf Version générale 1</p><h4>Créer différentes méthodes de recherche via des paramètres</h4><pre class="brush:php;toolbar:false">function createIndexOf(dir) {
  return function(array, value) {
    let index = dir > 0 ? 0 : arr.length - 1;
    for (; index >= 0 && index <p>3.3 IndexOf et lastIndexOf Version générale 2</p><h4>Cette fois, nous autorisons les recherches spécifiées Position, prenons un aperçu de la fonction de fromIndex : </h4><p></p>Définissez la position pour commencer la recherche. Si la valeur de l'index est supérieure ou égale à la longueur du tableau, cela signifie que la recherche ne sera pas effectuée dans le tableau et -1 sera renvoyé. <blockquote> Si la valeur d'index fournie dans le paramètre est une valeur négative, elle est utilisée comme décalage par rapport à la fin du tableau, c'est-à-dire que -1 signifie commencer la recherche à partir du dernier élément, -2 signifie commencer à partir du deuxième au dernier élément, et ainsi de suite par analogie. <p> Remarque : Si la valeur d'index fournie dans le paramètre est une valeur négative, le tableau sera toujours interrogé d'avant en arrière. Si la valeur de l'index de décalage est toujours inférieure à 0, l'ensemble du tableau sera interrogé. Sa valeur par défaut est 0. <br><br></p>
<pre class="brush:php;toolbar:false">function createIndexOf(dir) {
  return function(array, value, fromIndex) {
    // 设定开始查找的位置。如果该索引值大于或等于数组长度,意味着不会在数组里查找,返回 -1。
    let length = array == null ? 0 : array.length;
    let i = 0;
    if (!length) return -1;
    if (fromIndex >= length) return -1;
    if (typeof fromIndex === "number") {
      if (dir > 0) {
        // 正序
        // 起始点>=0,沿用起始点,否则起始点为从后向前数fromIndex
        i = fromIndex >= 0 ? fromIndex : Math.max(length + fromIndex, 0);
      } else {
        // 倒序
        // 起始点>=0,沿用起始点,否则起始点为从后向前数fromIndex
        length =
          fromIndex >= 0
            ? Math.min(fromIndex + 1, length)
            : fromIndex + length + 1;
      }
    }
    // 起始下标
    for (
      fromIndex = dir > 0 ? i : length - 1;
      fromIndex >= 0 && fromIndex C'est la fin de notre recherche d'éléments dans le tableau. Ce que nous avons implémenté est toujours très différent de 
ou

. trois sections, Pour une meilleure mise en œuvre, assurez-vous d'écrire dans la zone de message ~loadshunderscore

Sujet JavaScript 9 : Recherche déléments spécifiés dans un tableau

Recommandations d'apprentissage gratuites associées :

javascript(Vidéo)

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:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer