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.
可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
回答1:
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.)
回答2:
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:
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:
var sortedArr = arr.sort(function (a,b) { return b - a; });
var sum = 0;
for (var i = 0; i < 6; i++)
sum += sortedArr[i];