Somme Javascript des 6 valeurs les plus élevées dans un tableau

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];