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] }]

8voto

gildniy Points 63

```html

    const objArr = [
        {prop1: 'value1', prop2: 'value11'},
        {prop1: 'value2', prop2: 'value22'},
        {prop1: 'value3', prop2: 'option33'},
        {prop1: 'value4', prop2: 'option44'}
    ]

    const newObjArr = objArr.map(obj => {
            if (['value1', 'value2'].includes(obj.prop1)) {
                return {...obj, prop1: 'newValue'}
            }
            return obj
        }
    )

    // const responseGotten = [
    //     { prop1: 'newValue', prop2: 'value11' },
    //     { prop1: 'newValue', prop2: 'value22' },
    //     { prop1: 'value3', prop2: 'option33' },
    //     { prop1: 'value4', prop2: 'option44' }
    // ]

```

4voto

Divyanshu Rawat Points 383

Mais avant d'opter pour l'une des techniques mentionnées, veuillez garder à l'esprit les défis de performance associés à chacune des approches.

Itérer sur l'objet For-In, moyenne : ~240 microsecondes.

Itérer sur les clés de l'objet For Each, moyenne : ~294 microsecondes.

Itérer sur les entrées de l'objet For-Of, moyenne : ~535 microsecondes.

Référence - 3 erreurs de performance JavaScript que vous devriez arrêter de faire

3voto

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

});

mais la boucle for est plus rapide que $.each donc vous pouvez essayer d'utiliser

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

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

3voto

Muhammed Moussa Points 213

Vous pouvez jouer avec :

const tasks = [ { id: 1, done: false }, { id: 2, done: false } ]
const completed_task = { id: 1, done: true }

const markCompleted = (tasks, task) => {
  const index = tasks.findIndex(t => t.id === task.id);
  tasks.splice(index, 1);
  tasks.push(task);
  return tasks;
}

console.log(tasks)
console.log(markCompleted(tasks, completed_task))

ÉDITER

pour éviter le changement d'index :

const markCompleted = (tasks, task) => {
      const index = tasks.findIndex(t => t.id === task.id);
      tasks[index] = task;
      return tasks;
    }

2voto

Prashant Devs Points 55

Vous pouvez utiliser la fonction de filtrage de JavaScript.

obj = [
    {inActive:false, id:1},
    {inActive:false, id:2},
    {inActive:false, id: 3}
];
let nObj = obj.filter(ele => {
    ele.inActive = true;
    return ele;
});

console.log(nObj);

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