在我解决了数组对象最小值/最大值问题的基础上,我在思考使用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"]; }));
map
方法的返回结果正确,但是filter
方法的返回结果却是NaN。我将代码进行了调试和分步执行并最终检查了结果,看起来内部函数返回的是_vec
的x
属性,而实际从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>