Heim >Web-Frontend >js-Tutorial >Zusammenfassung häufig verwendeter Array-Algorithmen in JavaScript_Javascript-Kenntnissen

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

WBOY
WBOYOriginal
2016-05-16 15:15:491007Durchsuche

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

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

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

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

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

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

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

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

3. Array-Beurteilung

Methode 1:

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

Methode 2:

   //利用instanceof运算符
   var array5 = [];
   array5 instanceof Array;//true

Methode 3:

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

4. Finden Sie den Schnittpunkt von Arrays

Methode 1:

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

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

6. Array-Differenzsatz

Methode 1:

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

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

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

Stellungnahme:
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