it-swarm.com.de

Ändern Sie die Objekteigenschaft in einem Array von Objekten

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/

Gibt es eine Möglichkeit, eine bestimmte Objekteigenschaft (wie die oben herausgefilterte) zu ändern, ohne neue Arrays und/oder Objekte zu erstellen?

Erwünschtes Ergebnis: [{ bar: 1, baz: [11,22,33] }, { bar: 2, baz: [4,5,6] }]

24
Johan

Klar, ändere es einfach:

Mit jQuery's $.each:

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

Mit dem forEach von ES5:

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

... oder Sie haben andere Schleifenoptionen in dieser anderen SO answer .

24
T.J. Crowder

Ohne jQuery und Abwärtskompatibilität

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

Sie können find verwenden und seine Eigenschaft ändern.

let foo = [{ bar: 1, baz: [1,2,3] }, { bar: 2, baz: [4,5,6] }];

let obj = foo.find(f=>f.bar==1);
if(obj)
  obj.baz=[2,3,4];
console.log(foo);
7
Suraj Rao

Wir können dies auch erreichen, indem wir die Kartenfunktion von Array verwenden:

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

Bevor Sie sich jedoch für eine der genannten Techniken entscheiden, bedenken Sie bitte die mit jedem Ansatz verbundenen Leistungsherausforderungen.

Object iterate For-In, average: ~240 microseconds.

Object iterate Keys For Each, average: ~294 microseconds.

Object iterate Entries For-Of, average: ~535 microseconds.

Referenz - Fehler bei der JavaScript-Leistung, die Sie unterlassen sollten

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

});

die for-Schleife ist jedoch schneller als $ .each, sodass Sie versuchen können, sie zu verwenden

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

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