Heim > Web-Frontend > js-Tutorial > Hauptteil

Zusammenfassung häufig verwendeter Array-Algorithmen in JavaScript_Javascript-Kenntnissen

WBOY
Freigeben: 2016-05-16 15:15:49
Original
988 Leute haben es durchsucht

Nehmen Sie sich heute etwas Zeit, um einige häufig verwendete Array-Algorithmen in JavaScript zusammenzufassen, damit Sie sie in schriftlichen Interviews oder täglichen Entwicklungsprozessen verwenden können. Einige der Algorithmen stammen aus dem Internet und sind hier zusammengefasst. Ich werde die Quelle der Referenz am Ende des Artikels anhängen. Wenn es langweilig ist, sich den Algorithmus direkt anzusehen, können Sie ihn in der Referenzliteratur nachlesen.

1. Array-Deduplizierung

Methode 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;
}
Nach dem Login kopieren

Methode 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;
}
Nach dem Login kopieren

Methode 3:

//Vergleichen Sie benachbarte Elemente nach dem Sortieren. Wenn sie gleich sind, geben Sie auf, andernfalls addieren Sie sie zum Ergebnis. Das gleiche Problem wie bei Methode 2 tritt auf. Wenn das Array Situationen wie 1,1, „1“ enthält, erfolgt eine Fehlerbehebung

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;
}
Nach dem Login kopieren

Methode 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;
}
Nach dem Login kopieren

Methode 5:

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

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

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

Nach dem Login kopieren

2. Störung der Array-Reihenfolge

Methode 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;
};
Nach dem Login kopieren

Methode 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;
}
Nach dem Login kopieren

Methode 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; }

Nach dem Login kopieren

3. Array-Beurteilung

Methode 1:

//自带的isArray方法
var array6 = [];
Array.isArray(array6 );//true
Nach dem Login kopieren

Methode 2:

   //利用instanceof运算符
   var array5 = [];
   array5 instanceof Array;//true
Nach dem Login kopieren

Methode 3:

   //利用toString的返回值
   function isArray(o) {
     return Object.prototype.toString.call(o) === '[object Array]'; 
   }
Nach dem Login kopieren

4. Finden Sie den Schnittpunkt von Arrays

Methode 1:

   //利用filter和数组自带的indexOf方法
   array1.filter(function(n) {
   return array2.indexOf(n) != -1 });
Nach dem Login kopieren

5. Vereinigung von Arrays

Methode 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;
   };
Nach dem Login kopieren

6. Array-Differenzsatz

Methode 1:

   //利用filter和indexOf方法
   Array.prototype.diff = function(a) {
     return this.filter(function(i) {
      return a.indexOf(i) < 0;
      });
};
Nach dem Login kopieren

Die obige Methode 1 kann nur den Unterschied zwischen einem Array und einem anderen Array ermitteln. Beispielsweise kann array1.diff(array2) nur den Unterschied zwischen array1 und array2 ermitteln zwei Arrays. Um es zu erhalten, können Sie array1.diff(array2).concat(array2.diff(array1)) oder Methode 2

verwenden

Methode 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 );
Nach dem Login kopieren

Dies ist vorerst zusammengefasst und wird später hinzugefügt. Wenn Sie Fragen haben, hinterlassen Sie bitte eine Nachricht, um gemeinsam zu diskutieren und Fortschritte zu erzielen

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage