Javascript sum of highest 6 values in an array

2019-04-09 19:00发布

I have an array of roughly 10 values, and I was wondering if there was any way with JS or JQuery to add up the highest 6 values and get a total.

4条回答
你好瞎i
2楼-- · 2019-04-09 19:42

Simpler way (to understand obviously :) ) is

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);
查看更多
欢心
3楼-- · 2019-04-09 19:47

Answer edited to avoid the problem of 'overwriting the function with the result' identified by @pimvdb, and kindly explained by @some (in comments, below).

A simple approach that should cover almost all browsers (I think) is to use a function to sum the array values:

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);​

JS Fiddle demo.

Though, for those browsers in which it's available, reduce() is far, far simpler.

查看更多
淡お忘
4楼-- · 2019-04-09 19:52
var sortedArr = arr.sort(function (a,b) { return b - a; });
var sum = 0;
for (var i = 0; i < 6; i++)
    sum += sortedArr[i];
查看更多
唯我独甜
5楼-- · 2019-04-09 19:53

Here:

var top6Total = arr
                .map(function (v) { return +v; })
                .sort(function (a,b) { return a-b; })
                .slice( -6 )
                .reduce(function (a,b) { return a+b; });

Live demo: http://jsfiddle.net/bPwYB/

(Note: You would have to polyfill .reduce() for IE8.)

查看更多
登录 后发表回答