Jako kontynuację mojego min/max w całej tablicy obiektów zastanawiałem się nad porównaniami wydajności filtra z mapą.Filtr JavaScript vs problem z mapą
Tak więc przygotowałem test wartości w moim kodzie, tak jak miało to wyglądać w FireBug.
Jest to kod:
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
wersja ped zwraca poprawny wynik. Jednak wersja filter
ed zwraca NaN. Rozbijając go, przechodząc i ostatecznie sprawdzając wyniki, wydaje się, że funkcja wewnętrzna zwraca właściwość x
z _vec
, ale faktyczna tablica zwrócona z filter
jest niefiltrowana _vec
.
Wierzę, że moje użycie filter
jest poprawne - czy ktoś inny może zobaczyć mój problem?
Oto prosty test:
<!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>
ach. Wygląda na to, że źle zrozumiałem, jak funkcjonuje filtr. Miałem wrażenie, że zwrócił zmodyfikowany obiekt do tablicy. –