这么多括号。我真的无法把所有这些括号缠住

时间:2018-08-25 20:57:33

标签: javascript reactjs react-redux

为什么这里有两组括号?

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

我很难过这个陈述!为什么不能这样:

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

甚至可以尝试帮助我的人都很棒!

2 个答案:

答案 0 :(得分:3)

如果使用类似于您给出的第二个示例,则语法将是错误的。您将在filter语句后立即关闭括号。

在第一个示例中,实际的代码是这样的:

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

但是,为简化起见,我们正在破坏id参数。像这样:

const { id } = someObj;

See here more about destructuring

在函数参数中,我们这样做:

( { id } ) => { ... }

在这里,我们直接从参数对象中选取id属性。

在此上方有filter的括号。所以:

filter( ( { id } ) => { ... } )

答案 1 :(得分:3)

在第二个示例中,您将{id}写为filter的自变量,但是filter将这样编写的回调函数作为自变量

(arg) => {/*my code*/;}

因此,以这段代码并放置为参数可以得出结果

myFunction((arg) => {/*my code;*/})

您也可以

myCallback = (arg) => {/*my code*/;}
myFunction(myCallback);

另外,我猜您会遇到语法错误,因为函数的主要部分只是不带参数而编写。

这是您的第一个示例,在括号之间留有一些间距以更好地理解逻辑:

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

另一种可能的书写方式

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

更清晰吗?