Heim  >  Artikel  >  Web-Frontend  >  Sechs Möglichkeiten, Duplikate aus JS-Arrays zu entfernen

Sechs Möglichkeiten, Duplikate aus JS-Arrays zu entfernen

小云云
小云云Original
2018-03-07 13:22:572014Durchsuche

Methode 1:

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

Wenn es dieselben Werte gibt, überspringen Sie sie, wenn nicht, schieben Sie sie hinein das Array

Dieser Artikel stellt Ihnen hauptsächlich sechs Methoden zur Deduplizierung von JS-Arrays vor. Ich hoffe, er kann Ihnen helfen.

Array.prototype.distinct =function(){
 vararr = 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]);
 }
 returnresult;
}
var arra = [1,2,3,4,4,1,1,2,1,1,1];
arra.distinct();   //返回[3,4,2,1]

Methode 2: Verwenden Sie Spleiß, um direkt am ursprünglichen Array zu arbeiten

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

Wann Die Werte sind gleich. Dann löschen Sie diesen Wert

Hinweis: Nach dem Löschen des Elements müssen Sie die Länge des Arrays um 1 reduzieren.

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: belegt Hoher Speicher, langsame Geschwindigkeit

Methode 3: Verwenden Sie die Eigenschaften, dass die Eigenschaften von Objekten nicht gleich sein können, um sie zu deduplizieren

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: Rekursive Array-Deduplizierung

Rekursion verwenden

wird zuerst sortiert und dann am Ende verglichen,

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

: 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 Satz von ES6

Legen Sie die Datenstruktur fest, die einem Array ähnelt und deren Werte eindeutig sind.

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]

Der Erweiterungsoperator (...) verwendet intern eine for...of-Schleife

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

Das Folgende ist eine ergänzende Einführung in die Methode zum Zusammenführen von Arrays und Entfernen von Duplikaten

1. concat()-Methode

Idee: Die concat()-Methode führt das eingehende Array oder nicht- Array-Wert mit dem Original-Array erstellen und zurückgeben. Diese Methode generiert ein neues Array.

function concatArr(arr1, arr2){
  var arr = arr1.concat(arr2);
  arr = unique1(arr);//再引用上面的任意一个去重方法
  return arr;
}

2. Array.prototype.push.apply()

Idee: Der Vorteil dieser Methode besteht darin, dass kein neues Array generiert wird.

var a = [1, 2, 3];
var b = [4, 5, 6];
Array.prototype.push.apply(a, b);//a=[1,2,3,4,5,6]
//等效于:a.push.apply(a, b);
//也等效于[].push.apply(a, b); 
function concatArray(arr1,arr2){
  Array.prototype.push.apply(arr1, arr2);
  arr1 = unique1(arr1);
  return arr1;
}

Verwandte Empfehlungen:

Detaillierte Erläuterung der JS-Array-Deduplizierung und -Deflattening

Array-Deduplizierungsanalyse in JavaScript und Python

Mehrere Möglichkeiten zum Entfernen von Duplikaten aus JavaScript-Arrays

Das obige ist der detaillierte Inhalt vonSechs Möglichkeiten, Duplikate aus JS-Arrays zu entfernen. 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