J'ai une exigence où j'ai un tableau de nombres et j'obtiens également un nouveau nombre après quelques calculs. Après avoir obtenu ce nouveau nombre, je dois l'arrondir à la valeur la plus élevée la plus proche du tableau. Par exemple:
var count = [2,33,61,92,125,153,184,215,245,278,306,335,365]
Donc, si le nouveau nombre est 35 alors il devrait vérifier à partir du tableau et afficher le numéro 61 et non 33. Il devrait toujours arrondissez au nombre le plus élevé du tableau.
J'ai essayé mais cela ne m'a renvoyé que la valeur la plus proche du tableau et non le nombre le plus élevé du tableau. Puis-je savoir où je me suis trompé ou quels besoins supplémentaires doivent être vérifiés?
var counts = [2,33,61,92,125,153,184,215,245,278,306,335,365],
goal = 35;
var closest = counts.reduce(function(prev, curr) {
return (Math.abs(curr - goal) < Math.abs(prev - goal) ? curr : prev);
});
console.log(closest);
3 Réponses :
Utilisez .find()
Assurez-vous que votre tableau est trié ou cela vous donnera une mauvaise réponse.
var counts = [2,33,61,92,125,153,184,215,245,278,306,335,365] var goal = 33; var closest = counts.find(numb => numb >= goal); console.log(closest);
.find () fonctionnera si et seulement si le tableau des nombres est trié par ordre croissant. Parce qu'il renvoie le premier élément supérieur à l'objectif.
Cela fonctionne comme il est censé le faire, mais seul le problème avec cela est que lorsque le nombre sélectionné est le même que celui qui est présent dans le tableau, il renvoie toujours le plus grand nombre. Si l'objectif est 33, il doit renvoyer 33 du tableau et non 61.
@RaviShah bien changer > en > = j'ai mis à jour ma réponse
Les éléments suivants renvoient la valeur minimale parmi toutes les valeurs dont le nombre est supérieur à l'objectif.
var counts = [2,33,61,92,125,153,184,215,245,278,306,335,365], goal = 35; let min = Math.min(...counts.filter( num => num >= goal )); console.log(min)
Essayez ce code. Cela fonctionnera pour les tableaux triés et non triés.
let countsArr = [2,36,61,92,125,153,184,215,245,278,306,335,365];
const goalValue = 35;
let diff = Number.MAX_VALUE;
const closestMax = countsArr.reduce((acc, curr) => {
const currDiff = curr - goalValue;
if((currDiff > diff) || (currDiff < 0)) {
return acc;
}
else {
diff = currDiff;
return curr;
}
});
console.log(closestMax);
s'il n'y avait pas de 61 dans le tableau, vous attendriez-vous à ce qu'il renvoie 33 ou 92?
S'il n'y avait pas de 61, je m'attendrais à ce qu'il renvoie 92 mais les valeurs du tableau sont fixes, cela ne changera pas.
tableau sera trié par ordre croissant?