Heim  >  Artikel  >  Web-Frontend  >  5 Algorithmus-Implementierungen für JS-Array-Deduplication_Javascript-Kenntnisse

5 Algorithmus-Implementierungen für JS-Array-Deduplication_Javascript-Kenntnisse

WBOY
WBOYOriginal
2016-05-16 15:33:461484Durchsuche

1. Array-Traversal-Methode
Die einfachste Methode der Deduplizierung, Implementierungsidee: 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 ist in Die Array-Methode „indexOf“ ist eine ECMAScript5-Methode, die von IE8 und niedriger nicht unterstützt wird. Sie müssen mehr Code schreiben, um mit Browsern niedrigerer Versionen kompatibel zu sein:

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

2. Objekt-Schlüssel-Wert-Paar-Methode
Diese Methode wird schneller ausgeführt als jede andere Methode, benötigt jedoch mehr Speicher Implementierungsidee: Erstellen Sie ein neues js-Objekt und ein neues Array und beurteilen Sie beim Durchlaufen des eingehenden Arrays value Ist es der Schlüssel des js-Objekts? Wenn nicht, fügen Sie den Schlüssel zum Objekt hinzu und fügen Sie ihn 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.

// 速度最快, 占空间最多(空间换时间) 
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; 
} 

3. Array-Index-Beurteilungsmethode
Sie müssen immer noch „indexOf“ aufrufen und die Leistung ist ähnlich wie bei Methode 1. Implementierungsidee: Wenn das i-te Element des aktuellen Arrays zuerst an einer anderen Position als i erscheint Im aktuellen Array bedeutet dies, dass das i-te Element Element i wiederholt und ignoriert wird. Andernfalls speichern Sie das Ergebnisarray.

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; 
} 

4. Angrenzende Entfernungsmethode nach dem Sortieren
Obwohl die Sortierergebnisse der „Sort“-Methode nativer Arrays nicht sehr zuverlässig sind, hat dieser Mangel keine Auswirkungen auf die Deduplizierung, bei der die Reihenfolge nicht berücksichtigt wird. 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 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; 
} 

5. Array-Traversal-Methode optimieren
Der Implementierungscode dieser Methode ist ziemlich cool, 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.) Empfohlen

// 思路:获取没重复的最右一值放入新数组 
function unique5(array){ 
var r = []; 
for(var i = 0, l = array.length; i < l; i++) { 
 for(var j = i + 1; j < l; j++) 
  if (array[i] === array[j]) j = ++i; 
 r.push(array[i]); 
 } 
 return r; 
} 

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; 
} 
} 

Die oben genannten 5 JS-Array-Deduplizierungsalgorithmus-Implementierungen werden Ihnen hoffentlich hilfreich sein.

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