2016-02-02 2 views
1

J'ai donc un ensemble immutable.js d'objets d'événement.immutable.js: supprimer un élément dans un ensemble

L'ensemble est un attribut sur un objet Calendar:

const Calendar = new Record({ 
    'events': new Set(), // set of Events 
}); 

J'utilise Redux, et tirer des actions ponctuelles pour ajouter et supprimer des événements à partir d'un Calendar:

ajouter des événements à un calendrier fonctionne bien si vous le passez dans les objets appropriés et construisez l'objet à partir de ceux de mon réducteur:

case ADD_EVENT_TO_CURRENT_CALENDAR: 
    return state.updateIn(['events'], (events)=> events.add({ 
     start: action.event.date, 
     end: action.event.date, 
     title: `${action.event.show.venue}`, 
     show: action.event.show, 
     boundActions: action.boundActions, 
    })); 

le boundActions sur un événement est une action removeEventFromCurrentCalendar. L'appel que sur l'événement en cours déclenche le suivant dans le réducteur:

case REMOVE_EVENT_FROM_CURRENT_CALENDAR: 
    return state.updateIn(['events'], (events)=> { 
     events.delete(action.event); 
    }); 

action.event est équivalent à l'événement en cours sous la forme spécifiée dans ADD_EVENT..., à savoir:

{ 
     start, 
     end, 
     title, 
     show, 
     boundActions, 
    } 

Cependant, ce n'est pas exact même objet, ce qui est ce que je devine est déclenchement de l'appel .delete().

Quelle est la meilleure façon de supprimer cet objet similaire, mais pas le même, de cet ensemble en utilisant immutable.js?

Répondre

0

Vous pouvez utiliser Array.prototype.filter pour exclure manuellement l'objet. FWIW, il serait plus facile de filtrer si chaque élément de la matrice gardait un identifiant unique. Il suffit ensuite de comparer une seule valeur plutôt que la structure de l'objet.

0

Puis-je vous conseille de changer Record-Map et Set à List, puis lors de la mise à jour des événements List avec un nouvel événement, vous pouvez stocker une référence d'index en son sein (ceux-ci devraient également être Map bien qu'un Record est probablement bien trop).

Il devient assez trivial de l'enlever ensuite en utilisant Immutable.List.delete.