Comme continuation de mon min/max à travers un tableau d'objets, je m'interrogeais sur les comparaisons de performance de filter vs map.Filtre Javascript vs problème de carte
J'ai donc mis en place un test sur les valeurs de mon code comme j'allais regarder les résultats dans FireBug.
Voici le code:
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"]; }));
La map
version ped renvoie le résultat correct. Cependant, la version filter
ed renvoie NaN. Rompre, passer à travers et enfin inspecter les résultats, il semblerait que la fonction interne renvoie la propriété x
de _vec
mais le tableau réel retourné de filter
est le non filtré.
Je crois que mon utilisation de filter
est correcte - quelqu'un d'autre peut-il voir mon problème?
Voici un test simple:
<!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. Il semble que j'ai mal compris le fonctionnement du filtre. J'étais sous l'impression qu'il renvoyait un objet modifié à un tableau. –