2015-09-05 2 views
2

Je ne fais que commencer par immutable.js et je n'arrive pas à trouver comment définir une nouvelle propriété sur les objets d'un tableau. J'ai du mal à trouver des exemples dans les documents de ce genre de changement.immutable.js map over array (Liste) et ajouter une propriété

Je suis fondamentalement juste essayer de prendre changer ceci:

[{ 
    gitInfo: {id: 8001, host: '', …}, 
    module: {id: 24875, name: "blah", …} 
}...] 

à ceci:

[{ 
    gitInfo: {id: 8001, host: '', …}, 
    module: {id: 24875, name: "blah", isStared: true …} 
}...] 

Alors w/out immutable.js j'aurais quelque chose comme:

function markModules(modules) { 
    modules.map((module) => { 
     module.module.isStarred = false; 
     if (contains(this.props.stars, module.module.id)) { 
     module.module.isStarred = true; 
     } 
    }) 
    return modules; 
    } 

Je suppose que j'ai besoin de quelque chose comme set() with a List, mais encore une fois, je ne trouve pas d'exemples comment faire cela.

Merci pour des conseils ou des liens vers des exemples.

Répondre

3

Vous le feriez comme vous le feriez sans Immutable.js (.map).

const data = Immutable.fromJS([{ 
    gitInfo: {id: 8001, host: ''}, 
    module: {id: 24875, name: "blah"} 
}, { 
    gitInfo: {id: 6996, host: ''}, 
    module: {id: 666, name: "wef"} 
}]); 

const transformed = data.map((x) => { 
    return x.get('module').set('isStarred', true); 
}) 

transformed.toJS() === [ 
    { 
    "id": 24875, 
    "name": "blah", 
    "isStarred": true 
    }, 
    { 
    "id": 666, 
    "name": "wef", 
    "isStarred": true 
    } 
] 

Et si vous voulez mettre la logique supplémentaire là-dedans:

function markModules(modules) { 
    return modules.map((module) => { 
    const isStarred = contains(this.props.stars, module.getIn(['module', 'id'])); 
    return module.setIn(['module', 'isStarred'], isStarred); 
    }) 
} 

La clé est de transformer vos déclarations en valeurs si/fonctions qui renvoient des valeurs au lieu de mettre à jour la structure de données.