Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/377.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 reduce可以做map所做的一切吗?_Javascript_Filter_Functional Programming_Reduce - Fatal编程技术网

Javascript reduce可以做map所做的一切吗?

Javascript reduce可以做map所做的一切吗?,javascript,filter,functional-programming,reduce,Javascript,Filter,Functional Programming,Reduce,我在一次采访中被问到如何使用JavaScript(一种数组操作),我说我们可以使用reduce,但采访者说不,我们应该使用map,但我有点确信reduce可以做过滤器或map正在做的任何事情。我是对还是错 很抱歉,我不能重复我被问到的问题,但我在这里问的是JavaScript中的缩减技术…答案是:绝对是 Reduce实际上可以做任何可以通过单个迭代完成的事情 过滤器: myArray.reduce( (结果,项目)=>[…结果,…(myCallback(项目)?[项目]:[]), [] ) 地

我在一次采访中被问到如何使用JavaScript(一种数组操作),我说我们可以使用
reduce
,但采访者说不,我们应该使用
map
,但我有点确信
reduce
可以做
过滤器
map
正在做的任何事情。我是对还是错


很抱歉,我不能重复我被问到的问题,但我在这里问的是JavaScript中的缩减技术…

答案是:绝对是

Reduce实际上可以做任何可以通过单个迭代完成的事情

过滤器:

myArray.reduce(
(结果,项目)=>[…结果,…(myCallback(项目)?[项目]:[]),
[]
)
地图:

myArray.reduce(
(结果,项目)=>[…结果,我的回调(项目)],
[]
)

也就是说,如果需要筛选项目,请使用
filter()
;如果需要映射项目,请使用
map()
,答案是:绝对是

Reduce实际上可以做任何可以通过单个迭代完成的事情

过滤器:

myArray.reduce(
(结果,项目)=>[…结果,…(myCallback(项目)?[项目]:[]),
[]
)
地图:

myArray.reduce(
(结果,项目)=>[…结果,我的回调(项目)],
[]
)

也就是说,如果您需要筛选项目,请使用
filter()
;如果您需要映射项目,请使用
map()

可以,但这并不意味着您应该为任何单个任务将
Array#map
替换为
Array#reduce

如果要变换数组中的所有项,则
array#map
更实用:

[1,2,3].map(x=>x+10);
//=> [11,12,13]
//vs
[1,2,3]。减少((acc,x)=>(acc.push(x+10),acc),[]);
//=> [11,12,13]
Array#reduce
的典型示例是将列表缩减为单个值。e、 例如,将列表中的数字相加:

[1,2,3]。减少((tot,x)=>tot+x,0);
//=> 6
如果要同时变换和过滤,则
Array#reduce
可能会有所帮助:

[1,true,2,false,3]。过滤器(x=>typeof x=='number')。映射(x=>x+10);
//=> [11,12,13]
//vs
[1,对,2,错,3]。减少((acc,x)=>
x的类型==‘数字’?(acc.push(x+10),acc:acc,[]);
//=> [11,12,13]
从语法上讲,可以认为
.filter().map()
方法看起来更漂亮,但它的迭代次数确实超出了需要:
.filter()
生成另一个数组供
.map()
使用

如果要处理的列表很大,那么将数组操作链接到jQuery可能效率低下:

[items×1000].filter(…).map(…).filter(…).map(…).filter(…);
//根据您在每个步骤中所做的操作,这可能需要一段时间

是的,它可以,但这并不意味着您应该为任何单个任务将
数组#映射
替换为
数组#减少

如果要变换数组中的所有项,则
array#map
更实用:

[1,2,3].map(x=>x+10);
//=> [11,12,13]
//vs
[1,2,3]。减少((acc,x)=>(acc.push(x+10),acc),[]);
//=> [11,12,13]
Array#reduce
的典型示例是将列表缩减为单个值。e、 例如,将列表中的数字相加:

[1,2,3]。减少((tot,x)=>tot+x,0);
//=> 6
如果要同时变换和过滤,则
Array#reduce
可能会有所帮助:

[1,true,2,false,3]。过滤器(x=>typeof x=='number')。映射(x=>x+10);
//=> [11,12,13]
//vs
[1,对,2,错,3]。减少((acc,x)=>
x的类型==‘数字’?(acc.push(x+10),acc:acc,[]);
//=> [11,12,13]
从语法上讲,可以认为
.filter().map()
方法看起来更漂亮,但它的迭代次数确实超出了需要:
.filter()
生成另一个数组供
.map()
使用

如果要处理的列表很大,那么将数组操作链接到jQuery可能效率低下:

[items×1000].filter(…).map(…).filter(…).map(…).filter(…);
//根据您在每个步骤中所做的操作,这可能需要一段时间

就像你可以用鞋子给烤面包涂黄油一样,这是可行的,但刀更适合它是的,
reduce
可以做任何事
。map
可以做。事实上,所有数组迭代方法都可以用
reduce
表示。这并不意味着你应该对所有的代码都使用
reduce
。除非你正在使用(也)你不应该——当你在工作中使用正确的习语时,你的实际意思会更清楚。更不用说更容易实现了,只要你有一个回调,你就可以做任何事情,在这个回调中,你可以编写任意代码,并且拥有相同的权限。这并不意味着这是个好主意。就像你可以用鞋子在烤面包片上涂黄油一样,这是可行的,但刀更适合它。是的,
reduce
可以做任何事
。map
可以做。事实上,所有数组迭代方法都可以用
reduce
表示。这并不意味着你应该对所有的代码都使用
reduce
。除非你正在使用(也)你不应该——当你在工作中使用正确的习语时,你的实际意思会更清楚。更不用说更容易实现了,只要你有一个回调,你就可以做任何事情,在这个回调中,你可以编写任意代码,并且拥有相同的权限。这并不意味着这是一个好主意。也就是说,如果你在面试中写了这段代码,你很可能不会被录取。另外,我也不知道为什么在这些小片段中使用spread这种令人厌恶的做法变得如此流行,它将一切从O(n)变成了O(n²)——不仅仅是在这里,它已经结束了一段时间。你有证据证明它是O(n^2)吗?另外,您多长时间将数组与t一起使用一次