当前位置:  开发笔记 > 编程语言 > 正文

Javascript过滤器vs地图问题

如何解决《Javascript过滤器vs地图问题》经验,为你挑选了2个好方法。

作为我在对象数组中的最小值/最大值的延续,我想知道滤镜与地图的性能比较.

因此,我将对代码中的值进行测试,以便查看FireBug中的结果.

这是代码:

var _vec = this.vec;
min_x = Math.min.apply(Math, _vec.filter(function(el){ return el["x"]; }));
min_y = Math.min.apply(Math, _vec.map(function(el){ return el["x"]; }));

mapPED版本返回正确的结果.但是filtered版本返回NaN.打破它,逐步完成并最终检查结果,看起来内部函数返回x属性,_vec但返回的实际数组filter是未过滤的_vec.

我相信我的用法filter是正确的 - 其他人可以看到我的问题吗?

这是一个简单的测试:





S:GTC Map Test





Guffa.. 49

不,该filter方法不返回未取样的数组.它返回一个数组,其中包含内部函数返回true的项.

由于您没有从内部函数返回布尔值,因此该值将转换为boolean,因此对象引用将转换为true.因此,它返回一个包含原始数组中所有项的新数组.

filter方法与该map方法不同.该map方法用于转换数组的每个项目,而该filter方法用于选择数组的某些项目.比较这些方法之间的性能是没有实际意义的,因为只有其中一个方法可以做你想做的事情.



1> Guffa..:

不,该filter方法不返回未取样的数组.它返回一个数组,其中包含内部函数返回true的项.

由于您没有从内部函数返回布尔值,因此该值将转换为boolean,因此对象引用将转换为true.因此,它返回一个包含原始数组中所有项的新数组.

filter方法与该map方法不同.该map方法用于转换数组的每个项目,而该filter方法用于选择数组的某些项目.比较这些方法之间的性能是没有实际意义的,因为只有其中一个方法可以做你想做的事情.


啊.看来我误解了过滤功能是如何工作的.我的印象是它将一个修改过的对象返回给一个数组.

2> Nayagam..:

引自:

JavaScript:
David Flanagan 的权威指南

地图()

map()方法将调用它的数组的每个元素传递给您指定的函数,并返回一个包含该函数返回的值的数组.

例如:

a = [1, 2, 3];

b = a.map(function(x) { return x*x; });  // b is [1, 4, 9]

传递给map()的函数的调用方式与传递给forEach()的函数相同.但是,对于map()方法,您传递的函数应返回一个值.注意map()返回一个新数组:它不会修改它所调用的数组.如果该数组是稀疏的,则返回的数组将以相同的方式稀疏:它将具有相同的长度和相同的缺失元素.

过滤()

该方法返回一个数组,该数组包含调用它的数组元素的子集.传递给它的函数应该是谓词:返回true或false的函数.谓词的调用与forEach()和map()一样.如果返回值为true,或者转换为true的值,则传递给谓词的元素是子集的成员,并添加到将成为返回值的数组中.

例子:

a = [5, 4, 3, 2, 1];

smallvalues = a.filter(function(x) { return x < 3 });   // [2, 1]

everyother = a.filter(function(x,i) { return i%2==0 }); // [5, 3, 1]

推荐阅读
mobiledu2402851323
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有