使用带箭头函数参数的 filter() 方法
Using filter() Method with Arrow-Function Arguments
我已经明白了如何使用filter
,但是看到这个练习的答案:Eloquent JavaScript让我感到困惑(点击'look at the solution'就可以看到代码)。只是什么之间的区别是:
let counted = countBy(text, char => {
let script = characterScript(char.codePointAt(0));
return script ? script.direction : "none";
}).filter(({name}) => name != "none");
和:
let counted = countBy(text, char => {
let script = characterScript(char.codePointAt(0));
return script ? script.direction : "none";
}).filter(name => name != "none"); //The difference is here and when I tried this, it did not work
我熟悉的是使用 ... .filter(something => condition);
,它将 return 满足上述条件的原始数组中所有项目的数组。我尝试将上面的代码更改为 ... .filter(script => script.name != "none")
并且它起作用了。那么 ({name})
究竟做了什么让我不必输入那么长的内容?
这就是对象解构的作用。不是将对象 x
传递到过滤器然后与 x.name
进行比较,而是直接解构 name
。
.filter(({name}) => name != "none");
等同于
.filter(x => x.name != "none");
更多关于解构的信息here
我已经明白了如何使用filter
,但是看到这个练习的答案:Eloquent JavaScript让我感到困惑(点击'look at the solution'就可以看到代码)。只是什么之间的区别是:
let counted = countBy(text, char => {
let script = characterScript(char.codePointAt(0));
return script ? script.direction : "none";
}).filter(({name}) => name != "none");
和:
let counted = countBy(text, char => {
let script = characterScript(char.codePointAt(0));
return script ? script.direction : "none";
}).filter(name => name != "none"); //The difference is here and when I tried this, it did not work
我熟悉的是使用 ... .filter(something => condition);
,它将 return 满足上述条件的原始数组中所有项目的数组。我尝试将上面的代码更改为 ... .filter(script => script.name != "none")
并且它起作用了。那么 ({name})
究竟做了什么让我不必输入那么长的内容?
这就是对象解构的作用。不是将对象 x
传递到过滤器然后与 x.name
进行比较,而是直接解构 name
。
.filter(({name}) => name != "none");
等同于
.filter(x => x.name != "none");
更多关于解构的信息here