2017-02-08 2 views
1
var indianTeam = [{ 
     firstName: "KL", 
     lastName: "Rahul" 
    }, { 
     firstName: "Jayant", 
     lastName: "Yadav" 
    }, { 
     firstName: "Umesh", 
     lastName: "Yadav" 
    }]; 

In oben Array Sie Nachname in 2. und 3. haben doppelte Werte „yadav“ so möchte ich finde zweiten Duplikat (dh Umesh Yadav) und ersetzen sie durch ihre finden Vorname, verlassen Jayant Yadav als einzigartig. Idoppelte Array Objektwert mit einem anderen in Javascript

Funktion bisher

services.filterPlayers = function() { 

    var i,j,tempArray = []; 

    for (i = 0; i < indianTeam.length; i++) { 
     tempArray.push(indianTeam[i].lastName); 
    } 

    tempArray = tempArray.filter(function(elem, pos){ 
    if (tempArray.indexOf(elem) !== pos) { 
     return true; 
    }  
    }); 

    return tempArray; 
}; 

Szenario eins: ich doppelten yadav herausgefiltert und zurück eindeutige Werte vorübergehend mit == Zustand Zeichen,

Szenario zwei: nur yadav temporären kehrte mit! == Bedingung

Wie ersetzen Sie doppelte Yadav mit Vorname und drücken Sie auf die gleiche Position in temporären Array?

Referenz: codepen link

+0

ersetzen? Filter? einzigartig? was willst du? –

+0

Ich möchte Array wie ['rahul', 'yadav', 'umesh'] – Arun

+0

@Arun oh. Jetzt habe ich dich. aktualisiert meine Antwort ... –

Antwort

1

Sie könnten eine Hash-Tabelle für die lastName verwenden und überprüfen, ob gesetzt. Wenn eingestellt, nehmen Sie firstName, andernfalls lastName.

var indianTeam = [{ firstName: "KL", lastName: "Rahul" }, { firstName: "Jayant", lastName: "Yadav" }, { firstName: "Umesh", lastName: "Yadav" }, { firstName: "jane" }, { firstName: "joe" }], 
 
    hash = Object.create(null), 
 
    result = indianTeam.map(function (a) { 
 
     if (!a.lastName || hash[a.lastName]) { 
 
      return a.firstName; 
 
     }   
 
     hash[a.lastName] = true; 
 
     return a.lastName; 
 
    }); 
 

 
console.log(result);

+0

Haben Sie undefinierte Werte? –

+0

Wenn ich in meinem vollen Code lief, hat nur die erste Position den Nachnamen und alle anderen hat den Vornamen .Von Ihrem Snippet, sollte es als Rahul, Yadav, Umesh anzeigen ... Nur Umesh muss zuerst nicht andere Namen. – Arun

+0

Auch ich weiß nicht, wie Hash-Objekt mit Ergebnis-Array für Duplikate vergleicht? – Arun

1

Dies gibt Ihnen einen einzigartigen Nachnamen Array:

new Set(indianTeam.map(el=>el.lastName)); 

Dies schafft einen einzigartigen Nachnamen, Ausweich Vornamen Array:

indianTeam=indianTeam.map((el,i)=>indianTeam.findIndex(e=>e.lastName==el.lastName)===i?el.lastName:el.firstName); 

http://jsbin.com/sozeficafa/edit?console

Sie könnten nutze den Kartenspaß ction, die jedes Element durch das zurückgegebene ersetzt. Der Code prüft, ob das Element das erste gefunden wird, wenn es so bleibt, wenn es nicht das erste Element ersetzt.

+0

Danke Jonas w für die Antwort, aber es nicht zufrieden stellend mein Ergebnis als run ur Code in Jsbin – Arun

+0

@arun es entspricht dem Beispiel youve gegeben. übrigens traue dem jsbin nicht, dass sth dort verdorben wurde ... –

+0

@Arun http://jsbin.com/bimekapime/1/edit?console –

Verwandte Themen