2017-08-17 2 views
0

J'ai un tableau d'objets, et l'analyse est aussi un tableau d'objets.Comment utiliser immutability-helper pour mettre à jour des objets imbriqués dans un tableau?

const products = [ 
    { 
     id: '111', 
     analysis: [ 
      { id: 1, value: 51 }, 
      { id: 2, value: 40 }, 
      { id: 3, value: 25 } 
     ] 
    }, 
    { 
     id: '222', 
     analysis: [ 
      { id: 1, value: 77 }, 
      { id: 2, value: 99 }, 
      { id: 3, value: 22 } 
     ] 
    } 
] 

Je suis nouveau à immutability-helper. J'ai un tableau operations qui indique comment mettre à jour le tableau products.

const operations = [ 
    { id: '111', analysisId: 1, value: 10 }, 
    { id: '111', analysisId: 3, value: 4 }, 
    { id: '222', analysisId: 3, value: 88 } 
]; 

Donc, cela signifie que je veux trouver l'objet avec id = 111, puis trouver analysisId = 1, et enfin mettre à jour la valeur de 51 à 10. Ensuite, je vais devoir faire la même chose pour les 2 opérations de repos. Je ne veux pas muter products tableau. Est-ce que quelqu'un m'aiderait? Merci!

+0

Votre 'products' n'est pas initialisé comme' Immutable' objet? –

Répondre

1

Pour autant que je sais qu'ils seule façon de le faire est de trouver les indices avant de faire la mise à jour

operations.map(operation => { 
    var indexOfProduct = products.findIndex(x => x.id === operation.id); 
    var indexOfAnalysis = products[indexOfProduct].analysis.findIndex(a => a.id === operation.analysisId); 
    products = update(products, { 
     [indexOfProduct]: { 
      analysis: { 
       [indexOfAnalysis]: { 
        value: {$set: operation.value} 
        }     
       } 
      } 
     }) 
}); 
+0

Merci! Je ne pouvais pas déduire de leurs documents que nous devrions passer indexOfProduct en tant que [indexOfProduct]. – Dimo