Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript array.filter参数仅在环绕{}时有效_Javascript_Reactjs_Redux - Fatal编程技术网

Javascript array.filter参数仅在环绕{}时有效

Javascript array.filter参数仅在环绕{}时有效,javascript,reactjs,redux,Javascript,Reactjs,Redux,我不熟悉JavaScript和Redux。我试图在Redux中的一个还原器中基于id过滤数组,如果我只将id传递给回调函数,它将不起作用,但是如果id被包装在{id}周围,它将起作用 //Default store const defaultState = { articles: [], filtercriteria: {} }; //Reducer const articlesReducer = (state = defaultState.articles, action) =>

我不熟悉JavaScript和Redux。我试图在Redux中的一个还原器中基于id过滤数组,如果我只将id传递给回调函数,它将不起作用,但是如果id被包装在{id}周围,它将起作用

//Default store
const defaultState = {
  articles: [],
  filtercriteria: {}
};

//Reducer
const articlesReducer = (state = defaultState.articles, action) => {
  switch (action.type) {
    case "ADD":
      return [...state, action.article];
    case "REMOVE":
      //return state.filter(id => id !== action.id); //**DOES NOT WORK**
      return state.filter(({id}) => id !== action.id); // **WORKS**
    default:
      return state;
  }
  return state;
};

//Action Creator and Action
const remove = id => {
  return {
    type: "REMOVE",
    id
  };
};

//Action Dispatch
const addActionObject = store.dispatch(add());
store.dispatch(remove(addActionObject.article.id));

因为你在使用

destructuring assignment语法是一个JavaScript表达式 可以从数组中解压缩值,或从 对象转换为不同的变量

如果不使用destructuring,您将使用如下函数:

state.filter((item) => item.id !== action.id);
但是您可以使用解构将现有属性“id”分配给一个不同的变量

state.filter(({ id }) => id !== action.id);

如果希望它在没有括号的情况下工作,只需执行以下操作:

return state.filter(obj => obj.id !== action.id);
上面来自Pointy的评论给出了剩下的答案。
快乐编码是完全正确的。有一个用于对象分解的位置。问题是你正在过滤一系列的对象(文章)。筛选器获取一个谓词函数,该函数是数组元素的第一个参数

要制作较短的版本,可以使用对象分解。另外,您可以像这样编写
…过滤器(article=>article.id!==action.id)


在这里,你可以阅读更多关于。这里是。

的文档,您正在将状态设置为等于articles,这是一个对象数组。因此,当您编写{id}时,实际上是在对传入的对象进行解构,然后将其id存储在id变量中。如果不想用大括号将其括起来,可以执行以下操作:

return state.filter((article) => article.id !== action.id);
({id})
状态
数组中的每个对象提取“id”属性值。如果没有
{}
,则“id”将是整个对象。