2016-09-20 2 views
0

Ich suche nach einer einfachen Lösung. Ich habe ein Array wie array ("a", "b", "c", "a", "g");Duplikate einzelner "a" -Werte aus dem Array entfernen, wenn das Array mehrere "a" -Elemente enthält

Jetzt, wenn ich splice oder benutzerdefinierte remove Funktion versuchen, entfernt es alle "a" Elemente aus dem Array.

Was ich will ist, wenn ich "a" aus dem Array entfernen, dann sollte das Array schließlich 1 "a" -Element nur im Inneren haben und entfernen Sie alle anderen dulicates von "a".

Nun betrachten Sie einen anderen Fall, wenn mein Array wie Array ("a", "a", "b", "c", "a") ist, dann nach dem Entfernen von "a", sollte das Array Array mögen "ABC").

Hilfe benötigt,

Vielen Dank im Voraus

+0

Mögliches Duplikat (http [wie ein bestimmtes Element aus einem Array in JavaScript entfernen?]: // Stackoverflow.com/questions/5767325/How-to-entfernen-ein-Element-from-array-in-javascript) –

+0

@GillBates: Ich habe meine Frage aktualisiert. Können Sie das bitte jetzt überprüfen? – BeingExpert

+0

Noch die gleiche Frage, verwenden Sie einfach 'array.indexOf (" a ")' und dann 'array.splice (index, 1);' –

Antwort

0

Sie Set verwenden könnten und nur einzigartige Elemente im Array halten.

var unique = array => array.filter((set => a => !set.has(a) && set.add(a))(new Set)); 
 

 
console.log(unique(["a", "b", "c", "a", "g"])); 
 
console.log(unique(["a", "a", "b", "c", "a"]));

Different style

var unique = function (array) { 
 
     return array.filter(function (a) { 
 
      if (!this.has(a)) { 
 
       this.add(a); 
 
       return true; 
 
      } 
 
     }, new Set); 
 
    }; 
 

 
console.log(unique(["a", "b", "c", "a", "g"])); 
 
console.log(unique(["a", "a", "b", "c", "a"]));

ES5 mit Objekt als Hash-

var unique = function (array) { 
 
     return array.filter(function (a) { 
 
      if (!this[a]) { 
 
       return this[a] = true; 
 
      } 
 
     }, Object.create(null)); 
 
    }; 
 

 
console.log(unique(["a", "b", "c", "a", "g"])); 
 
console.log(unique(["a", "a", "b", "c", "a"]));

+0

Dies ist die Lösung, was ich erwartet habe. Danke – BeingExpert

+0

Der obige Code funktioniert nicht für NodeJs. Möglicherweise fehlt mir die korrekte Syntax. – BeingExpert

+0

Bitte versuchen Sie den zweiten Vorschlag. –

0

Versuchen Sie, diese Schnipsel

var arr = ["a","a","b","c","a"]; 
 
var arrayLength = arr.length; 
 

 
for (var i = 0; i < arrayLength; i++) { 
 
    for (var j = i + 1; j < arrayLength;) { 
 
    if (arr[j] == arr[i]) { 
 
     for (var k = j; k < arrayLength; k++) { 
 
     arr[k] = arr[k + 1]; 
 
     } 
 
     arrayLength--; 
 
    } else 
 
     j++; 
 
    } 
 
} 
 

 
var newArr = []; 
 
for (var i = 0; i < arrayLength; i++) { 
 
    newArr.push(arr[i]); 
 
} 
 
console.log(newArr);

0

können versuchen, diese ein

var array = ["a","a","b","c","a"]; 
 

 
var filterIfMultiple = function (data) { 
 
    var count = 0; 
 
    array = array.filter(function(val) { 
 
       if (val === data) count+=1; 
 
       if(val !== data || (val === data && count <= 1)){ 
 
       return val; 
 
       } 
 
      }); 
 
}; 
 

 
filterIfMultiple("a"); 
 
console.log(array);

Ein weiterer Prozess ohne Parameterübergabe mit ES6Set Objekt

+0

können wir oben Funktion anpassen, um automatisch alle Duplikate zu erkennen, grundsätzlich kann ich keinen Parameter senden, es kann alles sein. – BeingExpert

+0

kann zweiten Prozess versuchen, ohne Parameter @ShashikantSharma zu übergeben –

Verwandte Themen