每个对象都不同,我需要能够找到带有文件名的对象并删除我尝试过的整个数组项目索引和以下但不是真的有效
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]]}});
答案 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),
],
}