2017-02-12 4 views
0

Also habe ich alles versucht, was ich weiß. Mit Karte und Filter, Prototypen. Hat nicht funktioniert. .Überprüfung, ob mehr Elemente des Arrays den gleichen Wert des Schlüssels haben, wenn sie einen entfernen?

[{"color":"black","type":"bmw"},{"color":"gray","type":"golf"}, {"color":"red","type":"bmw"}, {"color":"black","type":"mercedes"}] 

Also, was ich erreichen will, ist, wenn ich Ajax tun, mit Javascript, um zu überprüfen, ob zwei oder mehr Objekt für Typen denselben Wert hat, wenn es zum Beispiel zwei oder mehr bmw-s ist, entfernen Sie andere und und nur ein Objekt mit bmw-Typ schieben. Hoffe ich bin klar genug. Vielen Dank im Voraus

+0

Sie wollen nur ein Element von jeder Art zu halten? –

Antwort

1

function removeDuplicates(arr) { 
 
    var alreadyExist = {};   // hash object to keep track of elemnt that have already been encountered 
 
    var indexes = [];    // array of indexes that will be removed 
 
    arr.forEach(function(o, i) {  // for each object o in arr 
 
    if(alreadyExist[o.type])  // if the type of the object o at index i already exist 
 
     indexes.push(i);    // mark its index i to be removed later 
 
    else       // if not 
 
     alreadyExist[o.type] = true; // then mark the object as found so other ones will be removed 
 
    }); 
 
    
 
    // for each index in the indexes array 
 
    for(var i = 0; i < indexes.length; i++) 
 
    arr.splice(indexes[i] - i, 1); // remove the object at that index (- i because the array arr is continually changing. Its length decrease every time we remove an item) 
 
} 
 

 
var array = [{"color":"black","type":"bmw"},{"color":"gray","type":"golf"}, {"color":"red","type":"bmw"}, {"color":"red","type":"bmw"}, {"color":"red","type":"bmw"}, {"color":"black","type":"mercedes"}]; 
 

 
removeDuplicates(array); 
 

 
console.log(array);

+0

Erstaunlich danke, upvoted :) – NemanjaD

0

Sie können verfolgen, welche Typen mit einem Objekt im Array bereits vorhanden sind, dann nur in neue Array schieben diejenigen, die nicht vorhanden sind:

var vehicles = [{"color":"black","type":"bmw"},{"color":"gray","type":"golf"}, {"color":"red","type":"bmw"}, {"color":"black","type":"mercedes"}]; 
var uniques = []; 
var types = {}; 
for (var i = 0; i < a.length; i++) { 
    if (!types[a[i].type]) { uniques.push(a[i]); } 
    types[a[i].type] = true; 
} 
//uniques = [{"color":"black","type":"bmw"},{"color":"gray","type":"golf"}, {"color":"black","type":"mercedes"}]; 
1

keine Elemente entfernen, erstellen Sie eine gefilterte Array:

var yourArray = [{"color":"black","type":"bmw"},{"color":"gray","type":"golf"}, {"color":"red","type":"bmw"}, {"color":"black","type":"mercedes"}]; 

var cache = {}, 
    filteredArray = yourArray.filter(({type}) => type in cache? false: (cache[type] = true)); 

console.log(filteredArray); 

Es ist zerstörungsfrei, leistungsfähiger und noch einfacher und kürzer.

Edit: Und auch ohne moderne Features:

var filteredArray = yourArray.filter(function(item){ 
     return item.type in this? false: (this[item.type] = true); 
    }, {/* the cache-object */}); //abusing `this` to pass the cache object 
+0

Sieht wirklich cool und modern ineed –

+0

@Kinduser, das einzige "moderne" Ding hier ist der fette Pfeil, oh, und mit Objekt Destrukturierung, um den Typ zu bekommen. – Thomas

+0

Super, danke das ist toll :) – NemanjaD

Verwandte Themen