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ではポリフィル .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 に答える