Heim > Artikel > Web-Frontend > Wie entferne ich Duplikate aus dem JS-Array?
js-Array-Deduplizierungsmethode: 1. Verwenden Sie das Set-Objekt von ES6 zum Deduplizieren. 2. Verwenden Sie for zum Verschachteln und anschließend zum Spleißen. 3. Verwenden Sie indexOf zum Deduplizieren dasselbe zum Deduplizieren. 5. Verwenden Sie die Kartendatenstruktur zum Deduplizieren.
Methode zur Array-Deduplizierung
1. ES6 Set-Objekt
ES6 stellt einen neuen Datenstruktursatz bereit. Es ähnelt einem Array, aber die Werte der Mitglieder sind eindeutig und es gibt keine doppelten Werte. Set selbst ist ein Konstruktor, der zum Generieren der Set-Datenstruktur verwendet wird.
function unique (arr) { return Array.from(new Set(arr)) } var arr = [1,1,'true','true',true,true,15,15,false,false, undefined,undefined, null,null, NaN, NaN,'NaN', 0, 0, 'a', 'a',{},{}]; console.log(unique(arr)) //[1, "true", true, 15, false, undefined, null, NaN, "NaN", 0, "a", {}, {}]
Unabhängig von der Kompatibilität benötigt diese Deduplizierungsmethode den geringsten Code. Diese Methode kann keine leeren „{}“-Objekte entfernen, und spätere Methoden auf hoher Ebene werden Methoden hinzufügen, um wiederholte „{}“ zu entfernen.
Zweitens verwenden Sie for zum Verschachteln und dann Spleißen, um Duplikate zu entfernen (am häufigsten in ES5 verwendet).
function unique(arr){ for(var i=0; i<arr.length; i++){ for(var j=i+1; j<arr.length; j++){ if(arr[i]==arr[j]){ //第一个等同于第二个,splice方法删除第二个 arr.splice(j,1); j--; } } } return arr; } var arr = [1,1,'true','true',true,true,15,15,false,false, undefined,undefined, null,null, NaN, NaN,'NaN', 0, 0, 'a', 'a',{},{}]; console.log(unique(arr)) //[1, "true", 15, false, undefined, NaN, NaN, "NaN", "a", {…}, {…}] //NaN和{}没有去重,两个null直接消失了
Doppelschichtige Schleife, äußeres Schleifenelement, innerer Schleifenvergleichswert. Bei Gleichheit der Werte wird dieser Wert gelöscht.
3. Verwenden Sie indexOf, um Duplikate zu entfernen
function unique(arr){ for(var i=0; i<arr.length; i++){ for(var j=i+1; j<arr.length; j++){ if(arr[i]==arr[j]){ //第一个等同于第二个,splice方法删除第二个 arr.splice(j,1); j--; } } } return arr; } var arr = [1,1,'true','true',true,true,15,15,false,false, undefined,undefined, null, null, NaN, NaN,'NaN', 0, 0, 'a', 'a',{},{}]; console.log(unique(arr)) //[1, "true", 15, false, undefined, NaN, NaN, "NaN", "a", {…}, {…}] //NaN和{}没有去重,两个null直接消失了
Erstellen Sie ein neues leeres Ergebnisarray, for-Schleife das ursprüngliche Array und bestimmen Sie, ob das aktuelle Element im Ergebnisarray vorhanden ist, überspringen Sie sie. Wenn sie nicht identisch sind, verschieben Sie sie in das Array.
4. Verwenden Sie sort()
function unique(arr) { if (!Array.isArray(arr)) { console.log('type error!') return; } arr = arr.sort() var arrry= [arr[0]]; for (var i = 1; i < arr.length; i++) { if (arr[i] !== arr[i-1]) { arrry.push(arr[i]); } } return arrry; } var arr = [1,1,'true','true',true,true,15,15,false,false, undefined,undefined, null, null, NaN, NaN,'NaN', 0, 0, 'a', 'a',{},{}]; console.log(unique(arr)) // [0, 1, 15, "NaN", NaN, NaN, {…}, {…}, "a", false, null, true, "true", undefined] //NaN、{}没有去重
Verwenden Sie die Sortiermethode sort() und durchlaufen und vergleichen Sie dann benachbarte Elemente basierend auf den sortierten Ergebnissen.
5. Verwenden Sie die Eigenschaften von Objekten, deren Attribute nicht identisch sein können, zum Deduplizieren (diese Methode zum Deduplizieren von Arrays weist Probleme auf, wird nicht empfohlen und muss verbessert werden)
function unique(arr) { if (!Array.isArray(arr)) { console.log('type error!') return } var arrry= []; var obj = {}; for (var i = 0; i < arr.length; i++) { if (!obj[arr[i]]) { arrry.push(arr[i]) obj[arr[i]] = 1 } else { obj[arr[i]]++ } } return arrry; } var arr = [1,1,'true','true',true,true,15,15,false,false, undefined,undefined, null,null, NaN, NaN,'NaN', 0, 0, 'a', 'a',{},{}]; console.log(unique(arr)) //[1, "true", 15, false, undefined, null, NaN, 0, "a", {…}] //两个true直接去掉了,NaN和{}去重
6. Die Verwendung umfasst
function unique(arr) { if (!Array.isArray(arr)) { console.log('type error!') return } var array =[]; for(var i = 0; i < arr.length; i++) { if( !array.includes( arr[i]) ) {//includes 检测数组是否有某个值 array.push(arr[i]); } } return array } var arr = [1,1,'true','true',true,true,15,15,false,false, undefined,undefined, null,null, NaN, NaN,'NaN', 0, 0, 'a', 'a',{},{}]; console.log(unique(arr)) //[1, "true", true, 15, false, undefined, null, NaN, "NaN", 0, "a", {…}, {…}] //{}没有去重
7. Verwenden Sie hasOwnProperty
function unique(arr) { var obj = {}; return arr.filter(function(item, index, arr){ return obj.hasOwnProperty(typeof item + item) ? false : (obj[typeof item + item] = true) }) } var arr = [1,1,'true','true',true,true,15,15,false,false, undefined,undefined, null,null, NaN, NaN,'NaN', 0, 0, 'a', 'a',{},{}]; console.log(unique(arr)) //[1, "true", true, 15, false, undefined, null, NaN, "NaN", 0, "a", {…}] //所有的都去重了
Verwenden Sie hasOwnProperty, um zu bestimmen, ob Objekteigenschaften vorhanden sind
8. Verwenden Sie den Filter
function unique(arr) { return arr.filter(function(item, index, arr) { //当前元素,在原始数组中的第一个索引==当前索引值,否则返回当前元素 return arr.indexOf(item, 0) === index; }); } var arr = [1,1,'true','true',true,true,15,15,false,false, undefined,undefined, null,null, NaN, NaN,'NaN', 0, 0, 'a', 'a',{},{}]; console.log(unique(arr)) //[1, "true", true, 15, false, undefined, null, "NaN", 0, "a", {…}, {…}]
9. Verwenden Sie Rekursion, um Duplikate zu entfernen
function unique(arr) { var array= arr; var len = array.length; array.sort(function(a,b){ //排序后更加方便去重 return a - b; }) function loop(index){ if(index >= 1){ if(array[index] === array[index-1]){ array.splice(index,1); } loop(index - 1); //递归loop,然后数组去重 } } loop(len-1); return array; } var arr = [1,1,'true','true',true,true,15,15,false,false, undefined,undefined, null,null, NaN, NaN,'NaN', 0, 0, 'a', 'a',{},{}]; console.log(unique(arr)) //[1, "a", "true", true, 15, false, 1, {…}, null, NaN, NaN, "NaN", 0, "a", {…}, undefined]
0. Verwenden Sie zum Entfernen die Kartendatenstruktur Duplikate
function arrayNonRepeatfy(arr) { let map = new Map(); let array = new Array(); // 数组用于返回结果 for (let i = 0; i < arr.length; i++) { if(map .has(arr[i])) { // 如果有该key值 map .set(arr[i], true); } else { map .set(arr[i], false); // 如果没有该key值 array .push(arr[i]); } } return array ; } var arr = [1,1,'true','true',true,true,15,15,false,false, undefined,undefined, null,null, NaN, NaN,'NaN', 0, 0, 'a', 'a',{},{}]; console.log(unique(arr)) //[1, "a", "true", true, 15, false, 1, {…}, null, NaN, NaN, "NaN", 0, "a", {…}, undefined]
Erstellen Sie eine leere Kartendatenstruktur, durchlaufen Sie das Array, das dedupliziert werden muss, und speichern Sie jedes Element des Arrays als Schlüssel in der Karte. Da in der Karte nicht derselbe Schlüsselwert angezeigt wird, ist das Endergebnis das Ergebnis nach der Deduplizierung.
Eleven. Verwendung von Reduce+includes
Twelve sind sehr ähnlich, deshalb habe ich sie nicht aufgeschrieben.Verwandte kostenlose Lernempfehlungen:
JS-Video-Tutorial
Das obige ist der detaillierte Inhalt vonWie entferne ich Duplikate aus dem JS-Array?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!