2017-09-11 1 views
0

Je dois mettre à jour tous les éléments d'une liste immuable Javascript, en utilisant la bibliothèque immutable.js, sans conditions IF. Maintenant, je le fais en utilisant une liste auxiliaire, comme le code suivant:Existe-t-il une manière élégante de mettre à jour plusieurs éléments dans une liste immutable en utilisant immutable.js?

const secondList = []; 

firstList.map((item, i) => { 
    item.position = i; 
    secondList.push(item); 
}); 

firstList = Immutable.List(secondList); 

Puis-je optimiser ce code à l'aide d'une fonction spécifique Immuable?

Répondre

0

données Immuable ne peuvent pas être modifiés une fois créés

Alors ... Je pense que vous avez tort. Soit vous ne devriez pas utiliser un immutable, soit vous ne devriez pas le modifier ici.

Si vous voulez toujours faire cela, vous pouvez utiliser la méthode réelle Array.map, au lieu de l'utiliser comme Array.forEach. La différence est que le rappel de la carte renvoie les données (modifiées) et le résultat de la carte est un tableau avec ces données modifiées ... Nous pouvons donc raccourcir un peu votre code.

firstList = Immutable.List(firstList.map((item, i) => { 
    item.position = i; 
    return item; 
})); 
+0

Pourquoi ne devrais-je pas modifier ma liste immutable? Dans ce cas, je suis en train de faire une opération et de retourner une nouvelle liste, donc la liste d'origine n'est pas modifiée, en gardant le concept d'objets immuables, ai-je tort? J'ai pensé que peut-être la bibliothèque a un moyen de le faire sans boucles. – rafakx

+0

La citation provient directement de la documentation de immutable.js. Vous ne pouvez pas le modifier directement, mais vous pouvez modifier sa référence, comme vous l'avez fait dans votre code. Vous êtes en effet retourner une nouvelle liste, et remplacer l'ancienne liste avec elle. C'est exactement la même chose que de modifier votre immutable directement ... – Salketer