假设我有一个包含多部电影的数组,这些电影对象包含标题/评级/等等......
如果我这样做的话:
let filteredMapList = arr.filter(function(obj){
return obj.Rating > 8.0;
}).map(function(obj){
return {title: obj.Title,rating: obj.Rating};
});
这应该有效并且只返回高于8.0的电影,并且只返回新对象中的标题和评级。
所以我的困惑是......哪一个正好先跑?是地图先运行然后经过过滤器还是首先运行过滤器然后运行地图(这看起来很奇怪......即使这就是它的布局)。
当把方法链接在一起时,你怎么做......跟随链。在方法之间传递的obj
也需要相同吗?如果不是......那么我真的很困惑它是如何运作的。
答案 0 :(得分:4)
它们按照它们所处的顺序链接和运行。如果你像这样重写它会更明显:
let a = arr.filter(function(obj){
return obj.Rating > 8.0;
});
let b = a.map(function(obj){
return {title: obj.Title,rating: obj.Rating};
});
filter
首先发生,然后转到a
,然后在map
上调用a
,然后转到b
并显示结果。
链接功能是相同的,您只是跳过为每个步骤创建变量的步骤。
答案 1 :(得分:1)
filter
首先运行,map
秒。 map
作为参数收到= filter
返回的内容。