J'ai une gamme d'environ 10 valeurs, et je me demandais s'il y avait un moyen avec JS ou JQuery d'ajouter les 6 plus hautes valeurs et d'obtenir un total.
Ici:
var top6Total = arr .map(function (v) { return +v; }) .sort(function (a,b) { return ab; }) .slice( -6 ) .reduce(function (a,b) { return a+b; });
Démo en direct: http://jsfiddle.net/bPwYB/
(Remarque: vous .reduce()
polyfill .reduce()
pour IE8.)
Un moyen plus simple (pour comprendre évidemment :)) est
var arr = [1,2,3,4,5,6,7,8,9,10]; // your array arr = arr.sort(function (a,b) { return a - b; }); var sum=0; for(var i=0;i<6;i++) { sum+=arr[i]; } alert(sum);
Réponse éditée pour éviter le problème de 'écraser la fonction avec le résultat' identifié par @pimvdb, et explicitement expliqué par @some (dans les commentaires ci-dessous).
Une approche simple qui devrait couvrir presque tous les navigateurs (je pense ) est d'utiliser une fonction pour additionner les valeurs du tableau:
var vals = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; function arraySum(arr) { if (!arr) { return false; } else { var sum = 0; for (var i = 0, len = arr.length; i < len; i++) { sum += arr[i]; } return sum; } } sum = arraySum(vals.sort(function(a, b) { return b - a; }).slice(0, 6)); console.log(sum);
Démo de JS Fiddle .
Pourtant, pour les navigateurs dans lesquels il est disponible, reduce()
est loin, beaucoup plus simple.
var sortedArr = arr.sort(function (a,b) { return b - a; }); var sum = 0; for (var i = 0; i < 6; i++) sum += sortedArr[i];