2013-05-22 12 views
14
var foo = [{ bar: 1, baz: [1,2,3] }, { bar: 2, baz: [4,5,6] }]; 

var filtered = $.grep(foo, function(v){ 
    return v.bar === 1; 
}); 

console.log(filtered); 

http://jsfiddle.net/98EsQ/Modify Objekteigenschaft in einem Array von Objekten

Gibt es eine Möglichkeit, eine bestimmte Objekte Eigenschaft zu ändern (wie die, die ich oben Filterung out) ohne neue Arrays zu schaffen und/oder Objekte?

Wunschergebnis:

Mit $.each jQuery: [{ bar: 1, baz: [11,22,33] }, { bar: 2, baz: [4,5,6] }]

+0

@squint Ich war auf der Suche nach einem Treffen hod, die es mir erlaubte, auf ein bestimmtes Objekt "zu zeigen" und es mich verändern zu lassen (entweder in ES oder jQuery). Aber ich denke ich muss es manuell mit einer foreach machen :) – Johan

Antwort

15

Sicher, es nur ändern

$.each(foo, function() { 
    if (this.bar === 1) { 
     this.baz[0] = 11; 
     this.baz[1] = 22; 
     this.baz[2] = 33; 
    } 
}); 

Mit ES5 der forEach:

foo.forEach(function(obj) { 
    if (obj.bar === 1) { 
     obj.baz[0] = 11; 
     obj.baz[1] = 22; 
     obj.baz[2] = 33; 
    } 
}); 

... oder Sie haben other looping options in this other SO answer.

+0

Ich war mir nicht sicher ob ob etwas "eingebaut" in jQuery oder ES5 existiert. Aber ich denke nicht :) Danke T.J – Johan

1
$.each(foo,function(index,value) 
{ 
    if(this.bar==1) 
    { 
this.baz[0] = 11; 
     this.baz[1] = 22; 
     this.baz[2] = 33; 
    } 

}); 

aber für Schleife ist schneller als $ .each so kann u

for(var i=0; i <foo.length; i++) 
{ 

if(foo[i].bar==1) 
{ 
//change the code 
} 
} 
6

Ohne jQuery und Rückwärtskompatibilität

for (var i = 0; i < foo.length; i++) { 
    if (foo[i].bar === 1) { 
     foo[i].baz = [11,12,13]; 
    } 
} 
2

Wir können dies auch zu nutzen versuchen zu erreichen, indem Array der Karte mit Funktion:

foo.map((obj) => { 
    if(obj.bar == 1){ 
    obj.baz[0] = 11; 
    obj.baz[1] = 22; 
    obj.baz[2] = 33; 
    } 
}) 
Verwandte Themen