4

我有一个大约 10 个值的数组,我想知道 JS 或 JQuery 是否有任何方法可以将最高的 6 个值相加并得到一个总数。

4

4 回答 4

8

这里:

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

现场演示:http: //jsfiddle.net/bPwYB/

(注意:您必须为 IE8 进行polyfill .reduce()。)

于 2012-08-18T15:32:31.727 回答
5

更简单的方法(很明显:))是

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);
于 2012-08-18T15:35:14.387 回答
1
var sortedArr = arr.sort(function (a,b) { return b - a; });
var sum = 0;
for (var i = 0; i < 6; i++)
    sum += sortedArr[i];
于 2012-08-18T15:35:01.803 回答
1

编辑答案以避免@pimvdb 标识的“用结果覆盖函数”的问题,并由@some 解释(在下面的评论中)。

一个应该涵盖几乎所有浏览器(我认为)的简单方法是使用一个函数来对数组值求和:

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 小提琴演示

但是,对于那些可以使用它的浏览器来说,它reduce()要简单得多

于 2012-08-18T15:38:21.027 回答