Zum Beispiel habe ich:
var Data = [
{ id_list: 1, name: 'Nick', token: '312312' },
{ id_list: 2, name: 'John', token: '123123' },
]
Dann möchte ich dieses Objekt zum Beispiel sortieren / umkehrenname
. Und dann möchte ich so etwas bekommen:
var Data = [
{ id_list: 2, name: 'John', token: '123123' },
{ id_list: 1, name: 'Nick', token: '312312' },
]
Und jetzt möchte ich den Index des Objekts mit der Eigenschaft kennen name='John'
, um den Wert des Eigenschaftstokens zu erhalten.
Wie löse ich das Problem?
javascript
arrays
object
Rsboarder
quelle
quelle
{Key:Value}
, ich habe es für Sie behoben.Data
Objekt vorhanden zu sein. Es handelt sich lediglich um einen großgeschriebenen Variablennamen, der gegen die Konvention verstößt. Wenn jemand anderes davon betroffen ist, werde ich die Frage und die Antworten bearbeiten, um diese Benennung zu korrigieren.Antworten:
Wie die anderen Antworten vermuten lassen, ist das Durchlaufen des Arrays wahrscheinlich der beste Weg. Aber ich würde es in seine eigene Funktion stellen und es etwas abstrakter machen:
Damit können Sie nicht nur herausfinden, welches 'John' enthält, sondern auch, welches das Token '312312' enthält:
BEARBEITEN: Die Funktion wurde aktualisiert und gibt -1 zurück, wenn sie nicht gefunden wird. Sie folgt demselben Konstrukt wie Array.prototype.indexOf ()
quelle
Da ist der Sortierteil schon beantwortet. Ich werde nur einen anderen eleganten Weg vorschlagen, um den Index einer Eigenschaft in Ihrem Array zu erhalten
Ihr Beispiel ist:
Du kannst tun:
Array.prototype.map
ist auf IE7 oder IE8 nicht verfügbar. ES5-KompatibilitätUnd hier ist es mit ES6 und Pfeilsyntax, was noch einfacher ist:
quelle
Wenn Sie mit ES6 gut zurechtkommen. Arrays haben jetzt die Funktion findIndex . Was bedeutet, dass Sie so etwas tun können:
quelle
name: John
), dies nur zurückgibt das erste MatchWelches ist eine vereinfachte Version von:
Von mozilla.org:
quelle
token
Feld anstelle desname
Feldes überprüft, kann es zu Problemen kommen, da esData[0].token == 312312
ausgewertet wirdtrue
, aberData[0].token === 321321
ausgewertet wirdfalse
.Wenn Sie Probleme mit dem Internet Explorer haben, können Sie die Funktion map () verwenden, die ab 9.0 unterstützt wird:
quelle
Der einzige für mich bekannte Weg ist das Durchlaufen aller Arrays:
oder Groß- und Kleinschreibung nicht beachten:
Auf Ergebnisvariable Index enthält Index des Objekts oder -1 , wenn nicht gefunden.
quelle
ein prototypischer Weg
quelle
Sie können Array.sort mit einer benutzerdefinierten Funktion als Parameter verwenden, um Ihren Sortiermechanismus zu definieren.
In Ihrem Beispiel würde es geben:
Die Sortierfunktion muss entweder -1 zurückgeben, wenn a vor b stehen soll, 1, wenn a nach b kommen soll, und 0, wenn beide gleich sind. Es liegt an Ihnen, die richtige Logik in Ihrer Sortierfunktion zu definieren, um das Array zu sortieren.
Bearbeiten: Verpasste den letzten Teil Ihrer Frage, in dem Sie den Index wissen möchten. Sie müssten das Array durchlaufen, um herauszufinden, wie andere gesagt haben.
quelle
Gehen Sie einfach Ihr Array durch und finden Sie die Position:
quelle
if(Data[item].name == 'John')
, ich habe es für dich repariert.Dies könnte nützlich sein
Kopiert von https://developer.mozilla.org/en/JavaScript/Guide/Working_with_Objects
quelle
Warum benutzt du kein kleines Workaround?
Erstellen Sie ein neues Array mit Namen als Indizes. Danach werden bei allen Suchvorgängen Indizes verwendet. Also nur eine Schleife. Danach müssen Sie nicht alle Elemente durchlaufen!
http://jsbin.com/xibala/1/edit
Live-Beispiel.
quelle
Die Antwort von Chris Pickett wurde erweitert, da ich in meinem Fall tiefer als eine Attributebene suchen musste:
Sie können 'attr1.attr2' an die Funktion übergeben
quelle
Was ist damit? ::
Angenommen, Sie verwenden lodash oder Unterstriche.
quelle
Wenn Sie ein Objekt mit mehreren Objekten haben und wissen möchten, ob ein Objekt im Master-Objekt enthalten ist, geben Sie einfach find (MasterObject, 'Object to Search') ein. Diese Funktion gibt die Antwort zurück, falls vorhanden oder nicht (TRUE oder FALSE) ), Ich hoffe Hilfe dabei, kann das Beispiel auf JSFiddle sehen .
quelle
quelle
quelle
Wenn Sie den Wert des Eigenschaftstokens abrufen möchten, können Sie dies auch versuchen
Dabei ist _.findKey die Funktion eines Lodash
quelle
Alternativ zur Antwort von Deutsch Attanasio Ruiz können Sie die 2. Schleife entfernen, indem Sie Array.reduce () anstelle von Array.map () verwenden.
quelle
Unterstrich verwenden:
quelle