Heim  >  Artikel  >  Web-Frontend  >  Ein Beispiel für die JS-Implementierung der Array-Deduplizierung

Ein Beispiel für die JS-Implementierung der Array-Deduplizierung

零下一度
零下一度Original
2017-07-16 14:52:481370Durchsuche

Eine Frage, auf die sich Front-End-Interviewer vorbereiten müssen: So entfernen Sie Duplikate aus dem Array von Javascript. Soweit ich weiß, haben Baidu, Tencent, Shanda usw. diese Frage alle in Interviews gestellt. Diese Frage scheint einfach, aber tatsächlich birgt sie versteckte Gefahren. Bei dem Test geht es nicht nur um die Realisierung dieser Funktion, sondern auch um Ihr tiefgreifendes Verständnis für die Ausführung von Computerprogrammen.

Methode 1:

Verwenden Sie Splice, um direkt am ursprünglichen Array zu arbeiten

Doppel- Layer-Schleife, äußeres Schleifenelement. Wenn der Wert

in der inneren Schleife verglichen wird, löschen Sie diesen Wert, wenn der Wert gleich ist

Hinweis: Nach dem Löschen des -Elements , Sie müssen die Länge des Arrays ändern Auch minus 1.

Array.prototype.distinct = function (){
  var arr = this,
    i,
    j,
    len = arr.length;
  for(i = 0; i < len; i++){
    for(j = i + 1; j < len; j++){
      if(arr[i] == arr[j]){
        arr.splice(j,1);
        len--;
        j--;
      }
    }
  }
  return arr;
};
var a = [1,2,3,4,5,6,5,3,2,4,56,4,1,2,1,1,1,1,1,1,];
var b = a.distinct();
console.log(b.toString()); //1,2,3,4,5,6,56

Vorteile: einfach und leicht zu verstehen

Nachteile: hohe Speichernutzung, langsame Geschwindigkeit

Methode 2:

Doppelschichtige Schleife, Elemente der äußeren Schleife, Werte während der inneren Schleife vergleichen

Wenn es dieselben Werte gibt, Überspringen Sie sie, wenn nicht, verschieben Sie sie in das Array

Array.prototype.distinct = function(){
  var arr = this,
    result = [],
    i,
    j,
    len = arr.length;
  for(i = 0; i < len; i++){
    for(j = i + 1; j < len; j++){
      if(arr[i] === arr[j]){
        j = ++i;
      }
    }
    result.push(arr[i]);
  }
  return result;
}
var arra = [1,2,3,4,4,1,1,2,1,1,1];
arra.distinct();       //返回[3,4,2,1]

Methode 3: Verwenden Sie die Attribute des Objekts, um Duplikate zu entfernen, wenn sie nicht die gleichen Eigenschaften haben können

Array.prototype.distinct = function (){
  var arr = this,
    i,
    obj = {},
    result = [],
    len = arr.length;
  for(i = 0; i< arr.length; i++){
    if(!obj[arr[i]]){  //如果能查找到,证明数组元素重复了
      obj[arr[i]] = 1;
      result.push(arr[i]);
    }
  }
  return result;
};
var a = [1,2,3,4,5,6,5,3,2,4,56,4,1,2,1,1,1,1,1,1,];
var b = a.distinct();
console.log(b.toString()); //1,2,3,4,5,6,56

Methode 4: ArrayRekursionDuplikation entfernen

Rekursive Idee verwenden

Erst sortieren und dann am Ende vergleichen, dann löschen


Array.prototype.distinct = function (){
  var arr = this,
    len = arr.length;
  arr.sort(function(a,b){    //对数组进行排序才能方便比较
    return a - b;
  })
  function loop(index){
    if(index >= 1){
      if(arr[index] === arr[index-1]){
        arr.splice(index,1);
      }
      loop(index - 1);  //递归loop函数进行去重
    }
  }
  loop(len-1);
  return arr;
};
var a = [1,2,3,4,5,6,5,3,2,4,56,4,1,2,1,1,1,1,1,1,56,45,56];
var b = a.distinct();
console.log(b.toString());    //1,2,3,4,5,6,45,56

Methode 5: Verwenden Sie indexOf und forEach


Array.prototype.distinct = function (){
  var arr = this,
    result = [],
    len = arr.length;
  arr.forEach(function(v, i ,arr){    //这里利用map,filter方法也可以实现
    var bool = arr.indexOf(v,i+1);    //从传入参数的下一个索引值开始寻找是否存在重复
    if(bool === -1){
      result.push(v);
    }
  })
  return result;
};
var a = [1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,3,3,3,3,3,3,3,2,3,3,2,2,1,23,1,23,2,3,2,3,2,3];
var b = a.distinct();
console.log(b.toString());  //1,23,2,3

Methode 6: Verwenden Sie den ES6-Satz

Legen Sie die Datenstruktur fest, die einem Array ähnelt, und die Werte seiner Mitglieder sind alle eindeutig.

Verwenden Sie Array.from, um die Set-Struktur in ein Array umzuwandeln


function dedupe(array){
  return Array.from(new Set(array));
}
dedupe([1,1,2,3]) //[1,2,3]

Erweitern Sie den Operator(...) für den internen Gebrauch for...of-Schleife

let arr = [1,2,3,3];
let resultarr = [...new Set(arr)];  
console.log(resultarr); //[1,2,3]

Das obige ist der detaillierte Inhalt vonEin Beispiel für die JS-Implementierung der Array-Deduplizierung. 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