Javascript过滤器与 map 问题

标签 javascript map filter

作为我对对象数组的最小值/最大值的延续,我想知道 filter 与 map 的性能比较。

所以我在我的代码中对值进行了测试,以便在 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。将其分解、单步执行并最终检查结果,似乎内部函数返回 _vecx 属性,但实际返回的数组是 filter 是未过滤的 _vec

我相信我对 filter 的使用是正确的 - 其他人能看到我的问题吗?

这是一个简单的测试:

<!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.filter(function(el){ return el["x"]; }));
min_y = 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>

最佳答案

不,filter 方法不返回未过滤的数组。它返回一个数组,其中包含内部函数返回 true 的项。

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

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

关于Javascript过滤器与 map 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2442798/

相关文章:

java - Java中 map 的浅拷贝

map - 如何从映射中将键和值导入变量?

javascript - 带有输入字段的实时搜索表

arrays - Angular 1.3 过滤具有数组属性的对象列表

javascript - 如何为 Flow 注释此函数

javascript - 生成缩略图并上传到 Node 中的 s3 存储桶的最佳方法是什么?

C++:value_type 与 make_pair,哪个更快用于 map 插入?

Grails 在操作返回值之后进行过滤

javascript - 在 Intern 中加载 Leadfoot 模块会产生错误

javascript - $.Deferred() 和 SharePoint 2013 JavaScript CSOM