Heim >Web-Frontend >js-Tutorial >Fünf Möglichkeiten zum Entfernen von Duplikaten aus JavaScript-Arrays_Javascript-Kenntnissen

Fünf Möglichkeiten zum Entfernen von Duplikaten aus JavaScript-Arrays_Javascript-Kenntnissen

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

Javascript-Array-Deduplizierung ist eine relativ häufige Anforderung, und es gibt viele Lösungen. Nachfolgend hat der Herausgeber eine Anleitung für die Deduplizierung von Arrays desselben Typs zusammengestellt Stellen Sie zunächst eine einfache Implementierungsidee vor.

Dinge:

Durchlaufen Sie das Array und vergleichen Sie es einzeln. Wenn der Vergleich derselbe ist, löschen Sie Folgendes:

Durchlaufen Sie das Array, vergleichen Sie eines nach dem anderen, überspringen Sie die vorherigen Duplikate und fügen Sie die verschiedenen in das neue Array ein

Fügen Sie ein beliebiges Array-Element in das neue Array ein, durchlaufen Sie die verbleibenden Array-Elemente, wählen Sie eines aus, vergleichen Sie es einzeln mit den Elementen des neuen Arrays. Wenn es Unterschiede gibt, fügen Sie es in das neue Array ein.

Durchlaufen Sie das Array, nehmen Sie ein Element als Attribut des Objekts und bestimmen Sie, ob das Attribut vorhanden ist

1. Löschen Sie die folgenden Duplikate:

function ov(arr){
 //var a=((new Date).getTime())
 for(var i=;i<arr.length;i++)
 for(var j=i+;j<arr.length;j++)
  if(arr[i]===arr[j]){arr.splice(j,);j--;}  
 //console.info((new Date).getTime()-a)  
 return arr.sort(function(a,b){return a-b});
}

2. Dies ist eine herkömmliche Methode, die leichter zu verstehen ist. Wenn sie gleich sind, springen Sie aus der Schleife

function ov(a) {
 //var a=((new Date).getTime())
 var b = [], n = a.length, i, j;
 for (i = ; i < n; i++) {
 for (j = i + ; j < n; j++)
  if (a[i] === a[j]){j=false;break;}
 if(j)b.push(a[i]);
 }
 //console.info((new Date).getTime()-a) 
 return b.sort(function(a,b){return a-b});
}

3. Es hat lange gedauert, bis ich das verstanden habe. Obwohl die j-Schleife hier fortgesetzt wird, hat sich der i-Wert geändert. Es entspricht einer neuen i-Schleife:

function ov(a) {
 //var a=((new Date).getTime())
 var b = [], n = a.length, i, j;
 for (i = ; i < n; i++) {
 for (j = i + ; j < n; j++)
 if (a[i] === a[j])j=++i
 b.push(a[i]);}
 //console.info((new Date).getTime()-a) 
 return b.sort(function(a,b){return a-b});
}

Stellen Sie sicher, dass alles im neuen Array eindeutig ist

function ov(ar){
//var a=((new Date).getTime())
 var m=[],f;
 for(var i=;i<ar.length;i++){
 f=true;
 for(var j=;j<m.length;j++)
 if(ar[i]===m[j]){f=false;break;};
 if(f)m.push(ar[i])}
//console.info((new Date).getTime()-a) 
 return m.sort(function(a,b){return a-b});
}

5. Objektattribute verwenden

function ov(ar){
// var a=(new Date).getTime()
 var m,n=[],o= {};
 for (var i=;(m= ar[i])!==undefined;i++)
 if (!o[m]){n.push(m);o[m]=true;}
// console.info((new Date).getTime()-a) 
 return n.sort(function(a,b){return a-b});;
 }

3 Eigenschaften des Javascript-Array-Objekts

1. Längenattribut

Das Längenattribut stellt die Länge des Arrays dar, also die Anzahl der darin enthaltenen Elemente. Da der Index eines Arrays immer bei 0 beginnt, sind die oberen und unteren Grenzen eines Arrays: 0 bzw. Länge-1. Im Gegensatz zu den meisten anderen Sprachen ist die Längeneigenschaft von JavaScript-Arrays variabel, was besondere Aufmerksamkeit erfordert. Wenn das Längenattribut größer eingestellt wird, ändert sich der Zustand des gesamten Arrays nicht. Nur das Längenattribut wird größer, wenn das Längenattribut kleiner als das Original gesetzt wird, und die Elemente im ursprünglichen Array mit Indizes, die größer oder gleich sind Länge wird Alle Werte gehen verloren. Das folgende Beispiel zeigt die Änderung des Längenattributs:

var arr=[12,23,5,3,25,98,76,54,56,76];

//Definiert ein Array mit 10 Zahlen

alert(arr.length); //Zeigt die Länge des Arrays 10 an

arr.length=12; //Erhöhen Sie die Länge des Arrays

alert(arr.length); //Zeigt an, dass die Länge des Arrays 12 geworden ist

alert(arr[8]); //Zeigt den Wert des 9. Elements an, der 56 ist

arr.length=5; // Reduzieren Sie die Länge des Arrays auf 5, und Elemente mit Indizes gleich oder größer 5 werden verworfen

alert(arr[8]); //Zeige, dass das 9. Element „undefiniert“ geworden ist

arr.length=10; //Array-Länge auf 10 wiederherstellen

alert(arr[8]); //Obwohl die Länge auf 10 zurückgesetzt wird, kann das 9. Element nicht wiederhergestellt werden und zeigt „undefiniert“ an

Aus dem obigen Code können wir die Natur des Längenattributs deutlich erkennen. Das Längenobjekt kann jedoch nicht nur explizit festgelegt, sondern auch implizit geändert werden. Sie können in JavaScript auch eine nicht deklarierte Variable verwenden (die sich auf ein Element mit einem Index bezieht, der größer oder gleich der Länge ist). In diesem Fall wird der Wert des Längenattributs auf festgelegt Wert des verwendeten Elementindex. Zum Beispiel der folgende Code:

var arr=[12,23,5,3,25,98,76,54,56,76];
alert(arr.length);
arr[15]=34;
alert(arr.length);

Der Code definiert auch ein Array mit 10 Zahlen. Aus der Alert-Anweisung geht hervor, dass seine Länge 10 beträgt. Dann wird das Element mit dem Index 15 verwendet und ihm der Wert 15 zugewiesen, d. h. arr[15]=34. Zu diesem Zeitpunkt wird die Alert-Anweisung verwendet, um die Länge des Arrays auszugeben, und das Ergebnis ist 16. Unabhängig davon ist dies eine überraschende Funktion für Entwickler, die an stark typisierte Programmierung gewöhnt sind. Tatsächlich beträgt die Anfangslänge eines mit new Array() erstellten Arrays 0. Es ist die Operation undefinierter Elemente, die dazu führt, dass sich die Länge des Arrays ändert.

Wie Sie der obigen Einführung entnehmen können, ist das Längenattribut so magisch, dass Sie es verwenden können, um die Kapazität des Arrays einfach zu erhöhen oder zu verringern. Daher hilft ein tiefes Verständnis des Längenattributs, es während des Entwicklungsprozesses flexibel zu nutzen.

2. Prototypattribut

Gibt einen Verweis auf den Prototyp des Objekttyps zurück. Die Prototypeigenschaft ist für das Objekt üblich.

objectName.prototype

Der objectName-Parameter ist der Name des Objektobjekts.

Beschreibung: Verwenden Sie das Prototypattribut, um eine Reihe grundlegender Funktionen der Objektklasse bereitzustellen. Neue Instanzen eines Objekts „erben“ die dem Prototyp des Objekts zugewiesenen Operationen.

Für Array-Objekte veranschaulicht das folgende Beispiel die Verwendung des Prototyp-Attributs.

Fügen Sie dem Array-Objekt eine Methode hinzu, die den maximalen Elementwert im Array zurückgibt. Um dies zu erreichen, deklarieren Sie eine Funktion, fügen Sie sie zu Array.prototype hinzu und verwenden Sie sie.

function array_max( )
{
 var i, max = this[0];
 for (i = 1; i < this.length; i++)
 {
 if (max < this[i])
 max = this[i];
 }
 return max;
}
Array.prototype.max = array_max;
var x = new Array(1, 2, 3, 4, 5, 6);
var y = x.max( );

该代码执行后,y 保存数组 x 中的最大值,或说 6。

3、constructor 属性

表示创建对象的函数。

object.constructor //object是对象或函数的名称。

说明:constructor 属性是所有具有 prototype 的对象的成员。它们包括除 Global 和 Math 对象以外的所有 JScript 固有对象。constructor 属性保存了对构造特定对象实例的函数的引用。

例如:

x = new String("Hi");
if (x.constructor == String) // 进行处理(条件为真)

function MyFunc {
// 函数体。
}
y = new MyFunc;
if (y.constructor == MyFunc) // 进行处理(条件为真)

以上内容就是关于本文给大家介绍的JavaScript数组去重的五种方法及javascript数组对象的三个属性,希望大家喜欢。

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