2016-04-17 5 views
1

Ich versuche, durch seinen Inhalt ein Array von Objekten zu filtern, das heißt:Filter ein Array von Objekt für Objekt Inhalt

https://jsfiddle.net/z7g3unyu/2/

var arr =[ 
    { 
    "uid": "1", 
    "name": "John Doe" 
    }, 
    { 
    "uid": "2", 
    "name": "Kate Roe" 
    } 
]; 

var newArr = arr.filter(function(e) { 
    return e["uid"] == 1; 
}); 

alert(newArr["name"]); 

ich ein neues Array, das enthält nur ein Objekt erstellen wollte welche UID ist gleich 1. Es gibt mir jedoch undefined. Was mache ich falsch?

+1

Zwei Probleme arbeiten Schnipsel: Ihre '.filter()' Rückruf verwendet '=' statt '==' ('=' ist für die Zuweisung), und der 'alert()' Aufruf sollte 'alert (newArr [0] .name)' oder 'alert (newArr [0] [" name "])' sein (würde funktionieren) . – Pointy

+0

Obwohl = war ein Rechtschreibfehler, der zweite Punkt ist, was ich gesucht habe! Vielen Dank! – sdvnksv

Antwort

3

Hier weisen Sie den Wert:

return e["uid"] = 1; 

Verwendung Doppel gleich == den Wert für die Gleichstellung zu überprüfen:

return e["uid"] == 1; 

Beachten Sie, dass filter() kehrt Array, nicht Objekt. Verwenden Sie die Klammernotation [0], um das erste Element eines Arrays zu erhalten.

Siehe unten

var arr = [{ 
 
    "uid": "1", 
 
    "name": "John Doe" 
 
}, { 
 
    "uid": "2", 
 
    "name": "Kate Roe" 
 
}]; 
 

 
var newArr = arr.filter(function(e) { 
 
    return e["uid"] == 1; 
 
}); 
 

 
alert(newArr[0]["name"]);

+1

Beachten Sie auch, dass 'filter()' Array, kein Objekt zurückgibt – charlietfl

1

Mit Lodash

_.filter(array, { uid: 1 });