si
le bloc s'exécute correctement. Quel est le problème avec le code?
[4]
Résultat attendu
[16]
Résultat réel:
let arr = [4, -4, 5.8, 1.6]; let newA = arr.filter((x) => { if (x > 0 && Number.isInteger(x)) { return x * x; } }) console.log(newA);
pourquoi?
p>
5 Réponses :
Le code donné fait la partie filtrage, car tout entier quadratique positif est un vérité , mais il ne renvoie pas la nouvelle valeur.
Il semble que vous ayez besoin de deux actions, une pour filtrer et modifier les valeurs filtrées.
Dans ce cas, vous avez besoin de href = "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter" rel = "noreferrer"> Array # filter
a > pour obtenir des nombres entiers positifs et Array #map
pour une valeur quadratique.
let array = [4, -4, 5.8, 1.6], result = array .filter(x => x > 0 && Number.isInteger(x)) .map(x => x * x); console.log(result);
Je ne suis pas sûr du cas d'utilisation, mais cela ressemble à "obtenir le carré de tous les entiers positifs dans un tableau". Si tel est le cas, le code ci-dessous devrait fonctionner.
let arr3=[4,-4,5.8,1.6]; let new3 = arr3.filter((x)=>{ return (x>0 && Number.isInteger(x)); }).map(function(y){ return y*y; })
Commencez par extraire la liste de tous les entiers positifs, puis renvoyez le carré de chaque élément de la liste.
La raison est déjà expliquée dans la réponse précédente, vous pouvez utiliser réduire
si vous souhaitez utiliser une seule fonction
let arr = [4, -4, 5.8, 1.6]; let newA = arr.reduce(function(accumulator, current) { if (current > 0 && Number.isInteger(current)) { accumulator.push(current * current); } return accumulator }, []) console.log(newA)
C'est ainsi que je vais également résoudre le problème ... Il n'est pas nécessaire d'itérer deux fois sur le tableau.
Le filtre filtre simplement la valeur et renvoie le résultat booléen. Vous pouvez utiliser map
comme ci-dessous,
let arr = [4, -4, 5.8, 1.6]; let newA = arr.filter((x) => x > 0 && Number.isInteger(x)) .map((x) => x * x); console.log(newA);
Avec la méthode reduction
:
let arr = [4, -4, 5.8, 1.6]; let newA = arr.reduce( ( acc, x ) => { if ( x > 0 && Number.isInteger(x) ) { acc = acc.concat( [x*x] ) } ; return acc; }, []) ; console.log(newA);
Le
Filter
doit renvoyer un résultat vrai / faux, ce que vous recherchez est probablement unecarte
.Parce que
filter
attend du prédicat qu'il renvoie un booléen (true
/false
), et que vous retournezx * x
qui évalue par exemple à16
pour votre premier élément qui est une valeur devéracité
c'est-à-dire n'est pas filtré de votre jeu de résultats.