Khi tiếp tục min/max của tôi trên một mảng các đối tượng, tôi đã tự hỏi về các so sánh hiệu suất của bộ lọc so với bản đồ.Bộ lọc Javascript vs vấn đề bản đồ
Vì vậy, tôi đặt cùng một thử nghiệm trên các giá trị trong mã của tôi như là sẽ xem xét các kết quả trong FireBug.
Đây là mã:
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"]; }));
Phiên bản map
PED trả về kết quả chính xác. Tuy nhiên phiên bản ed filter
trả về NaN. Phá vỡ nó ra, bước qua và cuối cùng kiểm tra kết quả, nó sẽ xuất hiện rằng hàm bên trong trả về thuộc tính x
của _vec
nhưng mảng thực được trả về từ filter
là chưa được lọc _vec
.
Tôi tin rằng việc sử dụng filter
là chính xác - bất kỳ ai khác có thể thấy sự cố của tôi không?
Dưới đây là một thử nghiệm đơn giản:
<!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>
Ahh. Có vẻ như tôi đã hiểu lầm cách functon lọc hoạt động. Tôi đã ấn tượng rằng nó đã trả về một đối tượng đã được sửa đổi thành một mảng. –