Maison > interface Web > js tutoriel > le corps du texte

Résumé des algorithmes de tableau couramment utilisés dans les compétences JavaScript_javascript

WBOY
Libérer: 2016-05-16 15:15:49
original
980 Les gens l'ont consulté

Prenez le temps aujourd'hui de résumer certains algorithmes de tableaux couramment utilisés en JavaScript, afin de pouvoir les utiliser dans des entretiens écrits ou dans des processus de développement quotidiens. Certains algorithmes proviennent d’Internet et sont résumés ici. Je joindrai la source de la référence à la fin de l'article. S'il est ennuyeux de regarder l'algorithme directement, vous pouvez le lire dans la littérature de référence. L'explication est très bonne.

1. Déduplication de la baie

Méthode 1 :

//利用数组的indexOf方法
function unique (arr) {
 var result = []; 
 for (var i = 0; i < arr.length; i++)
 {
  if (result.indexOf(arr[i]) == -1) result.push(arr[i]);
 }
 return result;
}
Copier après la connexion

Méthode 2 :

//利用hash表,可能会出现字符串和数字一样的话出错,如var a = [1, 2, 3, 4, '3', 5],会返回[1, 2, 3, 4, 5]
function unique (arr){
  var hash = {},result = []; 
  for(var i = 0; i < arr.length; i++)
  {
    if (!hash[arr[i]]) 
    {
      hash[arr[i]] = true; 
      result.push(arr[i]); 
    }
  }
  return result;
}
Copier après la connexion

Méthode 3 :

//Comparez les éléments adjacents après le tri, s'ils sont identiques, abandonnez, sinon ajoutez au résultat. Le même problème que la méthode 2 se produira. S'il y a des situations telles que 1,1, '1' dans le tableau, un dépannage se produira

function unique (arr) {
  arr.sort();
  var result=[arr[0]];
  for(var i = 1; i < arr.length; i++){
    if( arr[i] !== arr[i-1]) {
      result.push(arr[i]);
    }
  }
  return result;
}
Copier après la connexion

Méthode 4 :

//最简单但是效率最低的算法,也不会出现方法2和方法3出现的bug
function unique (arr) {
  if(arr.length == 0) return;
  var result = [arr[0]], isRepeate;
  for( var i = 0, j = arr.length; i < j; i++ ){
    isRepeate = false;
    for( var k = 0, h = result.length; k < h; k++){
      if(result[k] === arr[i]){
        isRepeate = true;
        break;
      }
      if(k == h) break;
    }
    if( !isRepeate ) result.push(arr[i]);
  }
  return result;
}
Copier après la connexion

Méthode 5 :

//此方法充分利用了递归和indexOf方法,感谢网友@真爱像深蓝
var unique = function (arr, newArr) {
   var num;

   if (-1 == arr.indexOf(num = arr.shift())) newArr.push(num);

   arr.length && unique(arr, newArr);
}

Copier après la connexion

2. Perturbation de la commande des tableaux

Méthode 1 :

//每次随机抽一个数并移动到新数组中
function shuffle(array) {
  var copy = [],
    n = array.length,
    i;
  // 如果还剩有元素则继续。。。
  while (n) {
    // 随机抽取一个元素
    i = Math.floor(Math.random() * array.length);
    // 如果这个元素之前没有被选中过。。
    if (i in array) {
      copy.push(array[i]);
      delete array[i];
      n--;
    }
  }
  return copy;
};
Copier après la connexion

Méthode 2 :

//跟方法1类似,只不过通过splice来去掉原数组已选项
function shuffle(array) {
  var copy = [],
    n = array.length,
    i;
  // 如果还剩有元素。。
  while (n) {
    // 随机选取一个元素
    i = Math.floor(Math.random() * n--);
    // 移动到新数组中
    copy.push(array.splice(i, 1)[0]);
  }
  return copy;
}
Copier après la connexion

Méthode 3 :

//前面随机抽数依次跟末尾的数交换,后面依次前移,即:第一次前n个数随机抽一个跟第n个交换,第二次前n-1个数跟第n-1个交换,依次类推。
function shuffle(array) {

var m = array.length,
  t, i;
// 如果还剩有元素…
while (m) {
  // 随机选取一个元素…
  i = Math.floor(Math.random() * m--);
  // 与当前元素进行交换
  t = array[m];
  array[m] = array[i];
  array[i] = t;
}
return array; }

Copier après la connexion

3. Jugement du tableau

Méthode 1 :

//自带的isArray方法
var array6 = [];
Array.isArray(array6 );//true
Copier après la connexion

Méthode 2 :

   //利用instanceof运算符
   var array5 = [];
   array5 instanceof Array;//true
Copier après la connexion

Méthode 3 :

   //利用toString的返回值
   function isArray(o) {
     return Object.prototype.toString.call(o) === '[object Array]'; 
   }
Copier après la connexion

4. Trouver l'intersection des tableaux

Méthode 1 :

   //利用filter和数组自带的indexOf方法
   array1.filter(function(n) {
   return array2.indexOf(n) != -1 });
Copier après la connexion

5. Union des tableaux

Méthode 1 :

   //方法原理:连接两个数组并去重
   function arrayUnique(array) {
     var a = array.concat(array2);
     for(var i=0; i<a.length; ++i) {
       for(var j=i+1; j<a.length; ++j) {
         if(a[i] === a[j])
           a.splice(j--, 1);
       }
     }
     return a;
   };
Copier après la connexion

6. Ensemble de différences de tableau

Méthode 1 :

   //利用filter和indexOf方法
   Array.prototype.diff = function(a) {
     return this.filter(function(i) {
      return a.indexOf(i) < 0;
      });
};
Copier après la connexion

La méthode 1 ci-dessus ne peut trouver que la différence entre un tableau et un autre tableau. Par exemple, array1.diff(array2) ne peut trouver que la différence entre array1 et array2. deux tableaux, pour l'obtenir, vous pouvez array1.diff(array2).concat(array2.diff(array1)), ou vous pouvez utiliser la méthode 2

Méthode 2

   var array1 = new Array(55,55,88,6,68,109,55,33,6,2,1);
   var array2 = [55,88,99,69,109,55,33,6,2,1];
   var diffArr = array1.concat(array2);
   
   var diff = diffArr.filter(function(i) {
           return array1.indexOf(i) < 0||array2.indexOf(i) < 0;
       });
   
   console.log( diff );
Copier après la connexion

Ceci est résumé pour l'instant et sera ajouté plus tard. Tout le monde est invité à ajouter. Si vous avez des questions, veuillez laisser un message pour discuter et progresser ensemble ^_^

.
Étiquettes associées:
source:php.cn
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal