Javascript过滤器vs地图问题

前端之家收集整理的这篇文章主要介绍了Javascript过滤器vs地图问题前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
作为我的最小/最大跨越一组对象的延续,我想知道过滤器与地图的性能比较.

所以我把代码中的值放在一起,看看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"]; }));

映射版本返回正确的结果.然而,过滤的版本返回NaN.打破它,逐步通过并最终检查结果,内部函数显示_vec的x属性,但是从过滤器返回的实际数组是未过滤的_vec.

我相信我的使用过滤器是正确的 – 任何人可以看到我的问题吗?

这是一个简单的测试:

<!DOCTYPE html>
<html lang="en">
<head>
<Meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>S:GTC Map Test</title>
</head>
<body>
<script type="text/javascript">
function vector(x,y,z) { this.x = x; this.y =y; this.z=z; }
var vec = [];
vec.push(new vector(1,1,1));
vec.push(new vector(2,2,2));
vec.push(new vector(2,3,3));
var _vec = vec;
min_x = Math.min.apply(Math,_vec.map(function(el){ return el["x"]; }));

document.write("<br>filter = " + min_x);
document.write("<br>map = " + min_y);
</script>
</body>
</html>

解决方法

不,过滤方法不会返回未烧取的数组.它返回一个包含内部函数返回true的项的数组.

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

过滤方法与map方法不同. map方法用于转换数组的每个项目,而使用过滤器方法来选择数组的某些项目.比较方法之间的性能是有道理的,因为只有其中一个执行您想要的操作.

原文链接:https://www.f2er.com/js/152570.html

猜你在找的JavaScript相关文章