Heim > Web-Frontend > js-Tutorial > Hauptteil

Was sind die effizienten Algorithmen in JavaScript?

亚连
Freigeben: 2018-06-11 15:07:45
Original
1804 Leute haben es durchsucht

Dieser Artikel stellt hauptsächlich fünf gängige und effiziente Algorithmen zum Löschen doppelter Elemente von Arrays in JavaScript vor. Er fasst und analysiert mehrere gängige Operationstechniken zum Löschen doppelter Elemente von Arrays in JavaScript in Form von Beispielen

Die Beispiele in diesem Artikel beschreiben fünf häufig verwendete und effiziente Algorithmen zum Löschen doppelter Elemente aus Arrays in JavaScript. Teilen Sie es als Referenz mit allen. Die Details lauten wie folgt:

Hier sind 5 Methoden zur Implementierung der Array-Deduplizierung in js. Eine Demo und ein Quellcode sind beigefügt.

1. Array-Traversal-Methode

Die einfachste Methode zum Entfernen von Duplikaten,

Implementierungsideen : Erstellen Sie ein neues Array, durchlaufen Sie das eingehende Array und fügen Sie den Wert hinzu, wenn er nicht im neuen Array enthalten ist. Hinweis: Die Methode „indexOf“ zur Bestimmung, ob sich der Wert im Array befindet, ist eine ECMAScript5-Methode, die von nicht unterstützt wird Für IE8 und niedrigere Versionen müssen Sie mehr Browsercode schreiben. Der Quellcode lautet wie folgt:

2 Objekt-Schlüssel-Wert-Paar-Methode

Diese Methode wird schneller ausgeführt als jede andere Methode.

Implementierungsidee: Erstellen Sie beim Durchlaufen ein neues js-Objekt und ein neues Array Bestimmen Sie anhand des eingehenden Arrays, ob der Wert der Schlüssel des js-Objekts ist. Wenn nicht, wird der Schlüssel zum Objekt hinzugefügt und in einem neuen Array platziert. Hinweis: Bei der Feststellung, ob es sich um einen js-Objektschlüssel handelt, wird „toString()“ automatisch für den eingehenden Schlüssel ausgeführt. Verschiedene Schlüssel können mit demselben verwechselt werden, zum Beispiel: a[1], a[„1“]. Um das obige Problem zu lösen, müssen Sie noch „indexOf“ aufrufen.

// 最简单数组去重法
function unique1(array){
 var n = []; //一个新的临时数组
 //遍历当前数组
 for(var i = 0; i < array.length; i++){
  //如果当前数组的第i已经保存进了临时数组,那么跳过,
  //否则把当前项push到临时数组里面
  if (n.indexOf(array[i]) == -1) n.push(array[i]);
 }
 return n;
}
// 判断浏览器是否支持indexOf ,indexOf 为ecmaScript5新方法 IE8以下(包括IE8, IE8只支持部分ecma5)不支持
if (!Array.prototype.indexOf){
 // 新增indexOf方法
 Array.prototype.indexOf = function(item){
  var result = -1, a_item = null;
  if (this.length == 0){
   return result;
  }
  for(var i = 0, len = this.length; i < len; i++){
   a_item = this[i];
   if (a_item === item){
    result = i;
    break;
   } 
  }
  return result;
 }
}
Nach dem Login kopieren

3. Array-Index-Beurteilungsmethode

Sie müssen immer noch „indexOf“ aufrufen und die Leistung ist ähnlich wie bei Methode 1,

Implementierungsidee: Wenn das erste Vorkommen des i-ten Elements im aktuellen Array nicht i im aktuellen Array ist, bedeutet dies, dass das i-te Element wiederholt und ignoriert wird. Andernfalls speichern Sie das Ergebnisarray.

// 速度最快, 占空间最多(空间换时间)
function unique2(array){
 var n = {}, r = [], len = array.length, val, type;
  for (var i = 0; i < array.length; i++) {
    val = array[i];
    type = typeof val;
    if (!n[val]) {
      n[val] = [type];
      r.push(val);
    } else if (n[val].indexOf(type) < 0) {
      n[val].push(type);
      r.push(val);
    }
  }
  return r;
}
Nach dem Login kopieren

4. Angrenzende Entfernungsmethode nach dem Sortieren

Obwohl das Sortierergebnis der „sort“-Methode des nativen Arrays nicht sehr zuverlässig ist , aber in Dieser Mangel hat keine Auswirkung auf die Deduplizierung, ohne auf die Reihenfolge zu achten.

Implementierungsidee: Sortieren Sie das eingehende Array nach den gleichen Werten und fügen Sie beim Durchlaufen nur Werte hinzu, die keine Duplikate des vorherigen Werts sind das neue Array.

function unique3(array){
 var n = [array[0]]; //结果数组
 //从第二项开始遍历
 for(var i = 1; i < array.length; i++) {
  //如果当前数组的第i项在当前数组中第一次出现的位置不是i,
  //那么表示第i项是重复的,忽略掉。否则存入结果数组
  if (array.indexOf(array[i]) == i) n.push(array[i]);
 }
 return n;
}
Nach dem Login kopieren

5. Optimierung der Array-Traversal-Methode

Aus ausländischen Blogbeiträgen geht hervor, dass der Implementierungscode dieser Methode ziemlich cool ist; 🎜 >

Implementierungsidee

: Holen Sie sich den Wert ganz rechts ohne Duplizierung und fügen Sie ihn in ein neues Array ein. (Wenn doppelte Werte erkannt werden, wird die aktuelle Schleife beendet und die nächste Beurteilungsrunde der Schleife der obersten Ebene beginnt.)

// 将相同的值相邻,然后遍历去除重复值
function unique4(array){
 array.sort(); 
 var re=[array[0]];
 for(var i = 1; i < array.length; i++){
  if( array[i] !== re[re.length-1])
  {
   re.push(array[i]);
  }
 }
 return re;
}
Nach dem Login kopieren
Das Obige ist das, was ich für alle zusammengestellt habe. Ich hoffe, dass es so sein wird hilfreich für alle in der Zukunft.

Verwandte Artikel:

Vergleich und Unterscheidung zwischen Express und Koa2 in NodeJS (ausführliches Tutorial)

Verschlüsse in JS (ausführliches Tutorial) )

Der Singleton-Modus in JS implementiert das Hinzufügen, Löschen, Ändern und Überprüfen von Daten

Verwenden Sie Vue, um Toutiao heute zu imitieren (ausführliches Tutorial)

So konfigurieren Sie eslint für die React-Entwicklung

JS-Bereich und Voranalysemechanismus (ausführliches Tutorial)

Das obige ist der detaillierte Inhalt vonWas sind die effizienten Algorithmen in JavaScript?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!