Heim > Web-Frontend > js-Tutorial > Zusammenfassung der Javascript-Array-Deduplication_Javascript-Fähigkeiten

Zusammenfassung der Javascript-Array-Deduplication_Javascript-Fähigkeiten

WBOY
Freigeben: 2016-05-16 15:11:57
Original
1431 Leute haben es durchsucht

Vorwort

Um den Job zu wechseln und mich auf ein Vorstellungsgespräch vorzubereiten, habe ich gestern Nachmittag damit begonnen, JavaScript-bezogenes Wissen zu überprüfen und über die damit verbundenen Methoden der Array-Deduplizierung nachzudenken, also habe ich einfach ein paar Artikel über JavaScript-Algorithmen zusammengestellt Die zukünftige Verwendung dieser Artikelserie ist ungewiss, ich werde schreiben, wo immer ich denke, keine Garantie für Richtigkeit, keine Garantie für hohe Effizienz, nur über persönliches Verständnis sprechen, wenn es irgendwelche Fehler gibt, korrigieren Sie mich bitte.

Informationen zum Entfernen von Duplikaten

Array-Deduplizierung ist ein häufiger Algorithmus-Inspektionspunkt, und der Weg zur Deduplizierung ist nichts anderes als Einzigartigkeit und Nicht-Einzigartigkeit. Vereinfacht ausgedrückt bedeutet es, die Eindeutigen auszuwählen oder die Nicht-Einzigartigen zu löschen. Alle folgenden Algorithmen wurden von mir blind benannt, bitte ignorieren Sie sie.

Schleifenabgleich zum Entfernen von Duplikaten

Wie der Name schon sagt, wird jedes Element im Array mit dem Array verglichen, in dem das Element gespeichert ist. Wenn es auf sich nicht wiederholende Elemente stößt, wird es bis zum Ende der Schleife in ein neues Array eingefügt kann auch als Double-Loop-Matching bezeichnet werden. Das Entfernen von Duplikaten ist die einfachste Möglichkeit, die sich jeder vorstellen kann.

Implementierungscode:

var arr=[1,3,4,56,3,7,9,7];
var result=[];
//匹配
function isMatch(array,n){
  for(var i=0;i<array.length;i++){
    if(array[i]==n){
      return true;
    }
  }
  return false;
};
//验证所有元素
function unqiue(array){
  for(var i=0;i<array.length;i++){
    if(!isMatch(result,array[i])){
      result.push(array[i]);
    }
  }
  return result;
};

console.log(unqiue(arr));

Nach dem Login kopieren

Hinweis: Bei der oben genannten Methode gibt es einen Fehler. Wenn Zahlen und numerische Zeichenfolgen vorhanden sind, wird zwischen Zahlen und numerischen Zeichenfolgen nicht unterschieden. Da in der Matching-Funktion isMatch() die doppelte Gleichheit „==" verwendet wird und der Elementtyp nicht überprüft wird, sollte eigentlich kongruent „===" verwendet werden.
Der geänderte Code lautet wie folgt:

var arr=[1,3,4,56,3,'1',7,9,7];
var result=[];
//匹配
function isMatch(array,n){
  for(var i=0;i<array.length;i++){
    if(array[i]===n){
      return true;
    }
  }
  return false;
};
//验证所有元素
function unqiue(array){
  for(var i=0;i<array.length;i++){
    if(!isMatch(result,array[i])){
      result.push(array[i]);
    }
  }
  return result;
};

console.log(unqiue(arr));

Nach dem Login kopieren

Vor- und Nachteile des Algorithmus:

Vorteile:

Einfache Umsetzung und intuitives Denken

Nachteile:

Ineffizienz

JSON-Deduplizierung/Objekt-Deduplizierung/Wörterbuch-Deduplizierung

JSON-Deduplizierung besteht einfach ausgedrückt darin, die Einzigartigkeit des Objekt-Objektschlüssels zu nutzen, um die Elemente des Arrays in JSON oder den Schlüsselwert des Objekts zu konvertieren. Der JSON-Wert speichert den Indexindex des Arrays, führt dann eine for-in-Schleife für das JSON-Objekt aus und speichert es in einem neuen Array.

Array, JSON und {} sind alles Objekte, daher kann dieser Algorithmus mit jedem beliebigen Objekt implementiert werden.

Implementierungscode:

Array-Modus:

var arr=[1,3,4,56,3,'1',7,9,7];
function unqiue(array){
  var cache=[];
  var result=[];
   //将数组元素转为对象的key
  for(var i=0;i<array.length;i++){
    cache[array[i]]=i;
  };
  
  //存储key(实际的数组元素)
  for(key in cache){
    result.push(key);
  };
  
  return result;
}
  
console.log(unqiue(arr));
Nach dem Login kopieren

JSON-Modus:

var arr=[1,3,4,56,3,'1',7,9,7];
function unqiue(array){
  var cache={};
  var result=[];
   //将数组元素转为对象的key
  for(var i=0;i<array.length;i++){
    cache[array[i]]=i;
  };
  
  //存储key(实际的数组元素)
  for(key in cache){
    result.push(key);
  };
  
  return result;
}
  
console.log(unqiue(arr));
Nach dem Login kopieren

Objektmodus:

var arr=[1,3,4,56,3,'1',7,9,7];
function unqiue(array){
  var cache=new Object();
  var result=[];
   //将数组元素转为对象的key
  for(var i=0;i<array.length;i++){
    cache[array[i]]=i;
  };
  
  //存储key(实际的数组元素)
  for(key in cache){
    result.push(key);
  };
  
  return result;
}
  
console.log(unqiue(arr));
Nach dem Login kopieren

Vor- und Nachteile des Algorithmus:

Vorteile:

Einfach

Sehr effizient

Nachteile:

1. Der Typ der Array-Elemente () wurde geändert
2. Es liegt ein Fehler vor (nichts anderes als die Unterscheidung zwischen Zahlen und numerischen Zeichenfolgen)

Rekursive Deduplizierung in der Warteschlange

Ich habe gestern Abend lange darüber nachgedacht und mir überlegt, das Array zunächst in aufsteigender oder absteigender Reihenfolge in eine Warteschlange zu sortieren, sodass sich dieselben Elemente in einem Bereich befinden, und dann vom Ende an abzugleichen Wenn die Übereinstimmung erfolgreich ist, wird das Ende der Warteschlange gelöscht, und das vorherige Element stimmt mit dem vorherigen Element überein. Nachdem der gesamte Abgleich abgeschlossen ist, bilden die verbleibenden Elemente die deduplizierte Warteschlange.

var arr=[6, 4, 6, 9, '6', 13, 56, 9, ,'11',1, 8, '7', 17, 5, 45, 3, 7];

function unqiue(array){
  //排序数组,形成队列
  array.sort(function(m,n){return m-n;});
  ////排序后,队尾向前对比,如果相同,删除队尾,依次类推
  function loop(Index){
    if(Index>=1){
      if(array[Index]===array[Index-1]){
        arr.splice(Index,1);
      }
      loop(Index-1);
    }
    
  }
  loop(array.length-1);
  return array;
}

console.log(unqiue(arr));

Nach dem Login kopieren

Vor- und Nachteile des Algorithmus:

Vorteile:

Höhere Effizienz

Nachteile:

Nicht die effizienteste

INDEXOF-Deduplizierungsmethode

Stellen Sie fest, ob der Browser indexOf unterstützt. indexOf ist eine neue Methode von ecmaScript5. Sie wird von IE8 und niedriger nicht unterstützt (einschließlich IE8, IE8 unterstützt nur einen Teil von 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

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