101 votes

Modifiez la propriété de l'objet dans un tableau d'objets

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/

Existe-t-il un moyen de modifier la propriété d'un certain objet (comme celui que je filtre ci-dessus) sans créer de nouveaux tableaux et/ou objets ?

Résultat souhaité: [{ bar: 1, baz: [11,22,33] }, { bar: 2, baz: [4,5,6] }]

89voto

Piotrek Points 702

.map avec l'opérateur spread (...)

var result = foo.map(el => el.bar == 1 ? {...el, baz: [11,22,33]} : el);

46voto

T.J. Crowder Points 285826

Bien sûr, il suffit de le changer :

Avec $.each de jQuery :

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

Avec forEach de ES5 :

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

...ou vous avez d'autres options de boucle dans cette autre réponse SO.

36voto

Suraj Rao Points 23390

Vous pouvez utiliser find et changer sa propriété.

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);

11voto

Mahima Agrawal Points 523

Nous pouvons également réaliser ceci en utilisant la fonction map de Array :

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

10voto

David Barker Points 6450

Sans jQuery et compatibilité ascendante

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X