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
Filterdoit renvoyer un résultat vrai / faux, ce que vous recherchez est probablement unecarte.Parce que
filterattend du prédicat qu'il renvoie un booléen (true/false), et que vous retournezx * xqui évalue par exemple à16pour votre premier élément qui est une valeur devéracitéc'est-à-dire n'est pas filtré de votre jeu de résultats.