Advertisement
Guest User

Untitled

a guest
Nov 25th, 2015
96
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.41 KB | None | 0 0
  1. var state = Immutable.fromJS({
  2. product_preview: {
  3. product_type: '',
  4. media_items: [
  5. {id: 0, url: 'my_url'},
  6. {id: 1, url: 'my_url'},
  7. {id: 2, url: 'my_url'}
  8. ],
  9. },
  10. });
  11.  
  12. // TASK: find the item inside the media_items list with id = 1 and update it's url to 'my_new_url'
  13.  
  14. // First, exhaustive solution, using only simple `get` and `set`, and `findIndex` methods
  15. var product_preview = state.get('product_preview');
  16. var media_items = product_preview.get('media_items');
  17.  
  18. var idx = media_items.findIndex(function(item){
  19. return item.get('id') === 1;
  20. });
  21. var item = media_items.get(idx);
  22. // Now we have the item, update it
  23. var newItem = item.set('url', 'my_new_url');
  24. var newMedia_items = media_items.set(idx, newItem);
  25. var newProduct_preview = product_preview.set('media_items', newMedia_items);
  26. var newState = state.set('product_preview', newProduct_preview);
  27.  
  28. // A bit simpler, by using `getIn` and `setIn` to perform deep get and set operations
  29. var media_items = state.getIn(['product_preview', 'media_items']);
  30. var idx = list.findIndex(function(val){ return val.get('id') === 1; });
  31. var newState = state.setIn(['product_preview', 'media_items', idx, 'url'], 'my_new_url');
  32.  
  33. // Lastly, using `updateIn`
  34. var newState = state.updateIn(['product_preview', 'media_items'], function(list){
  35. var idx = list.findIndex(function(item){
  36. return item.get('id') === 1;
  37. });
  38. return list.setIn([idx, 'url'], 'my_new_url');
  39. });
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement