2017-05-25 80 views
0

我有一個開關盒更新我的achievements數組中的一個項目,我怎樣纔能有一個DELETE_ACHIEVEMENT的類似開關盒從數組中刪除文本?使用object.assign更新嵌套數組中的reducer

case ADD_ACHIEVEMENT: 
    return state.map(item => { 
     if (item.id === action.id) { 
      return Object.assign({}, item, { 
      achievements: [ 
      ...item.achievements, 
      action.text, 
      ] 
      }); 
     } 

    return item; 
}); 

case REMOVE_ACHIEVEMENT: 
    return state.map(item => { 
     if (item.id === action.id) { 
      return Object.assign({}, item, { 
      // check text is in array and delete? 
      achievements: [ 
      ...item.achievements, 
      action.text, 
      ] 
      }); 
     } 

    return item; 
}); 

回答

0

U可以使用Array.prototype.filter()來檢查當前achivements並返回不同的元素action.text:

case REMOVE_ACHIEVEMENT: 
     return state.map(item => { 
      if (item.id === action.id) { 
       return Object.assign({}, item, { 
       achievements: [ 
       ...item.achievements.filter(achievement => achievement !== action.text) 
       ] 
       }); 
      } 

     return item; 
    });