Redux根据对象值从状态中删除项目

时间:2017-10-02 08:16:06

标签: reactjs react-native redux react-redux

我的redux商店中有以下状态,它是具有一系列对象的照片 enter image description here

每个对象都不同,我需要能够找到带有文件名的对象并删除我尝试过的整个数组项目索引和以下但不是真的有效

case actionTypes.PHOTO_DELETE:
           // return state.filter((photo) => photo.filename !== action.data)

            return { photos: state.photos.filter(photo =>
                photo.filename !== action.data
            )}

           // let index = state.photos.findIndex((photo) => photo.fillname === action.data);
            //console.log(index)
            /*
            var index = _.findIndex(action.data, function(photos) {
                return photos.photos == action.data
            })
            */
            //return update(state, {photoGroups: {$splice: [[index]]}});

3 个答案:

答案 0 :(得分:1)

通过检查内部数组中是否存在具有指定文件名的对象来过滤照片数组。如果它没有findIndex() === -1

return {
  photos: state.photos.filter(photo =>
    photo.findIndex(object => object.filename === action.data) === -1
  )
}

答案 1 :(得分:0)

您的方法存在的问题是您在照片数组上运行比较,而json数据中的照片数组中有另一个数组。因此,为了解决这个问题,请使用过滤器中的过滤器来访问照片对象并比较文件名。

 return { 
   photos: state.photos.filter(photos => {
     const match = photos.filter(photo => (photo.filename === action.data));
     // return false if match is found
     // thus removing photos array from the data
     return !(match && match.length);
   })
 };

答案 2 :(得分:0)

您可以destruct数组,这样就不会改变它:

const index = state.photos.findIndex(photos => 
  !photos.filter(photo => photo.filename === action.data)
)

return {
   ...state,
   photos: [
     ...state.photos.slice(0, index),
     ...state.photos.slice(index + 1),
  ],
}