Heim  >  Artikel  >  Web-Frontend  >  Detaillierte Einführung in 5 Beispielcodes für effiziente Algorithmen zum Löschen doppelter Elemente aus Arrays in JavaScript

Detaillierte Einführung in 5 Beispielcodes für effiziente Algorithmen zum Löschen doppelter Elemente aus Arrays in JavaScript

黄舟
黄舟Original
2017-03-11 15:25:191357Durchsuche

Ich habe mich schon eine Weile auf das Vorstellungsgespräch vorbereitet, daher wurde der Blog schon lange nicht mehr aktualisiert, nachdem ich die grundlegenden Wissenspunkte überprüft habe, werde ich einige häufig gestellte Vorstellungsgesprächsfragen teilen:

Gehen Sie für einen schriftlichen Test zu einem normalen Internetunternehmen. Es besteht eine hohe Wahrscheinlichkeit, dass Sie bei Interviews auf Verwendung von Javascript zur Implementierung der Array-Deduplizierung stoßen: wie zum Beispiel: Meizu schriftliche Testfragen

In diesem Blogbeitrag werden fünf Arten der Implementierung der Array-Deduplizierung in der JS-Methode beschrieben und die Demo und der Quellcode angehängt.

1. Array-Traversal-Methode

Die einfachste Methode der Deduplizierung, Implementierungsidee: Erstellen Sie ein neues Array und durchlaufen Sie das eingehende Array Array, wenn der Wert nicht im neuen Array ist, fügen Sie ihn dem neuen Array hinzu Hinweise : Die Methode „indexOf“, um zu bestimmen, ob der Wert im Array ist, ist ein ECMAScript5 Methode, die von IE8 und niedriger nicht unterstützt wird. Sie müssen mehr Codes schreiben, die mit Browsern niedrigerer Versionen kompatibel sind. Der Quellcode lautet wie folgt:

// 最简单数组去重法
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;
  }
}
2. Wertepaarungsmethode

Diese Methode wird schneller ausgeführt als jede andere Methode, d Bestimmen Sie anhand des eingehenden Arrays, ob der Wert der Schlüssel des js-Objekts ist.

Wenn nicht, fügen Sie das neue Objekt zu den Objektschlüsseln hinzu und fügen Sie es in ein neues Array ein. 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. 3.

Sie müssen noch „indexOf“ aufrufen. Die Leistung ist ähnlich wie bei Methode 1.
// 速度最快, 占空间最多(空间换时间)
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;
}
Implementierungsidee

: Wenn das i-te Element von Das aktuelle Array befindet sich im aktuellen Array. Wenn die einmal angezeigte Position nicht i ist, bedeutet dies, dass das i-te Element wiederholt und ignoriert wird. Andernfalls speichern Sie das Ergebnisarray.

4.

Obwohl die Sortierergebnisse der „Sort“-Methode nativer Arrays nicht sehr zuverlässig sind, hat dieser Mangel keine Auswirkungen auf die Deduplizierung, die nicht auf die Reihenfolge achtet.
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;
}
Implementierungsidee:

Sortieren Sie das eingehende Array. Nach dem Sortieren liegen dieselben Werte nebeneinander. Fügen Sie beim Durchlaufen nur Werte zum neuen Array hinzu, die keine Duplikate des vorherigen Werts sind.

Optimierung der Array-Traversal-Methode

Der Implementierungscode dieser Methode ist ziemlich cool.
// 将相同的值相邻,然后遍历去除重复值
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;
}
Implementierungsidee

: Holen Sie sich den ganz rechten ohne Duplizierung Platzieren Sie einen Wert im neuen Array. (Wenn doppelte Werte erkannt werden, wird die aktuelle Schleife beendet und die nächste Beurteilungsrunde der Schleife der obersten Ebene beginnt)

Das obige ist der detaillierte Inhalt vonDetaillierte Einführung in 5 Beispielcodes für effiziente Algorithmen zum Löschen doppelter Elemente aus Arrays in JavaScript. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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