115 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			115 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
---
 | 
						|
id: 5a24c314108439a4d403615a
 | 
						|
title: Remove an Item from an Array
 | 
						|
challengeType: 6
 | 
						|
forumTopicId: 301447
 | 
						|
dashedName: remove-an-item-from-an-array
 | 
						|
---
 | 
						|
 | 
						|
# --description--
 | 
						|
 | 
						|
Time to practice removing items from an array. The spread operator can be used here as well. Other useful JavaScript methods include `slice()` and `concat()`.
 | 
						|
 | 
						|
# --instructions--
 | 
						|
 | 
						|
The reducer and action creator were modified to remove an item from an array based on the index of the item. Finish writing the reducer so a new state array is returned with the item at the specific index removed.
 | 
						|
 | 
						|
# --hints--
 | 
						|
 | 
						|
The Redux store should exist and initialize with a state equal to `[0,1,2,3,4,5]`
 | 
						|
 | 
						|
```js
 | 
						|
assert(
 | 
						|
  (function () {
 | 
						|
    const initialState = store.getState();
 | 
						|
    return (
 | 
						|
      Array.isArray(initialState) === true &&
 | 
						|
      DeepEqual(initialState, [0, 1, 2, 3, 4, 5])
 | 
						|
    );
 | 
						|
  })()
 | 
						|
);
 | 
						|
```
 | 
						|
 | 
						|
`removeItem` and `immutableReducer` both should be functions.
 | 
						|
 | 
						|
```js
 | 
						|
assert(
 | 
						|
  typeof removeItem === 'function' && typeof immutableReducer === 'function'
 | 
						|
);
 | 
						|
```
 | 
						|
 | 
						|
Dispatching the `removeItem` action creator should remove items from the state and should NOT mutate state.
 | 
						|
 | 
						|
```js
 | 
						|
assert(
 | 
						|
  (function () {
 | 
						|
    const initialState = store.getState();
 | 
						|
    const isFrozen = DeepFreeze(initialState);
 | 
						|
    store.dispatch(removeItem(3));
 | 
						|
    const state_1 = store.getState();
 | 
						|
    store.dispatch(removeItem(2));
 | 
						|
    const state_2 = store.getState();
 | 
						|
    store.dispatch(removeItem(0));
 | 
						|
    store.dispatch(removeItem(0));
 | 
						|
    store.dispatch(removeItem(0));
 | 
						|
    const state_3 = store.getState();
 | 
						|
    return (
 | 
						|
      isFrozen &&
 | 
						|
      DeepEqual(state_1, [0, 1, 2, 4, 5]) &&
 | 
						|
      DeepEqual(state_2, [0, 1, 4, 5]) &&
 | 
						|
      DeepEqual(state_3, [5])
 | 
						|
    );
 | 
						|
  })()
 | 
						|
);
 | 
						|
```
 | 
						|
 | 
						|
# --seed--
 | 
						|
 | 
						|
## --seed-contents--
 | 
						|
 | 
						|
```js
 | 
						|
const immutableReducer = (state = [0,1,2,3,4,5], action) => {
 | 
						|
  switch(action.type) {
 | 
						|
    case 'REMOVE_ITEM':
 | 
						|
      // Don't mutate state here or the tests will fail
 | 
						|
      return
 | 
						|
    default:
 | 
						|
      return state;
 | 
						|
  }
 | 
						|
};
 | 
						|
 | 
						|
const removeItem = (index) => {
 | 
						|
  return {
 | 
						|
    type: 'REMOVE_ITEM',
 | 
						|
    index
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
const store = Redux.createStore(immutableReducer);
 | 
						|
```
 | 
						|
 | 
						|
# --solutions--
 | 
						|
 | 
						|
```js
 | 
						|
const immutableReducer = (state = [0,1,2,3,4,5], action) => {
 | 
						|
  switch(action.type) {
 | 
						|
    case 'REMOVE_ITEM':
 | 
						|
      return [
 | 
						|
        ...state.slice(0, action.index),
 | 
						|
        ...state.slice(action.index + 1)
 | 
						|
      ];
 | 
						|
    default:
 | 
						|
      return state;
 | 
						|
  }
 | 
						|
};
 | 
						|
 | 
						|
const removeItem = (index) => {
 | 
						|
  return {
 | 
						|
    type: 'REMOVE_ITEM',
 | 
						|
    index
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
const store = Redux.createStore(immutableReducer);
 | 
						|
```
 |