51

myData次のnew ArrayようなJavaScript 変数を定義しました。

var myData = new Array(['2013-01-22', 0], ['2013-01-29', 0], ['2013-02-05', 0],
             ['2013-02-12', 0], ['2013-02-19', 0], ['2013-02-26', 0], 
             ['2013-03-05', 0], ['2013-03-12', 0], ['2013-03-19', 0], 
             ['2013-03-26', 0], ['2013-04-02', 21], ['2013-04-09', 2]);

配列で見つかった数値(例:0 + 0 + 21 + 2 + 0など)を合計して、スクリプトタグの外で使用できる結果を持つ変数をおそらく持つことができるかどうか疑問に思っています。曜日ごとに対応するこの種の配列が7つあります。それをもとに後から比較してみたいと思います。可能であれば、それがこの種のアクションの最も好ましい方法ですか?

4

12 に答える 12

58

最も簡単な方法は次のとおりだと思います。

values.reduce(function(a, b){return a+b;})
于 2014-12-16T01:15:45.600 に答える
18

以下を試してください

var myData = [['2013-01-22', 0], ['2013-01-29', 1], ['2013-02-05', 21]];

var myTotal = 0;  // Variable to hold your total

for(var i = 0, len = myData.length; i < len; i++) {
    myTotal += myData[i][1];  // Iterate over your first array and then grab the second element add the values up
}

document.write(myTotal); // 22 in this instance

于 2013-04-17T10:33:32.503 に答える
13

reduceを使用します

var myData = new Array(['2013-01-22', 0], ['2013-01-29', 0], ['2013-02-05', 0], ['2013-02-12', 0], ['2013-02-19', 0], ['2013-02-26', 0], ['2013-03-05', 0], ['2013-03-12', 0], ['2013-03-19', 0], ['2013-03-26', 0], ['2013-04-02', 21], ['2013-04-09', 2]);

var sum = myData.reduce(function(a, b) {
    return a + b[1];
}, 0);

$("#result").text(sum);

jsfiddleで利用可能

于 2013-04-17T10:53:07.940 に答える
12

sum メソッドを作成するとうまくいきます。たとえば、sum 関数を Array に追加できます。

Array.prototype.sum = function(selector) {
    if (typeof selector !== 'function') {
        selector = function(item) {
            return item;
        }
    }
    var sum = 0;
    for (var i = 0; i < this.length; i++) {
        sum += parseFloat(selector(this[i]));
    }
    return sum;
};

その後、あなたはすることができます

> [1,2,3].sum()
6

そしてあなたの場合

> myData.sum(function(item) { return item[1]; });
23

編集: ビルトインの拡張は眉をひそめられる可能性があります。sum 関数をいくつかのモジュールに追加し、必要に応じて配列を引数として受け入れることができます。これは、署名をmyModule.sum = function(arr, selector) {thenthisに変更することを意味する可能性がありますarr

于 2014-06-24T01:02:50.460 に答える
8

またはES6で

values.reduce((a, b) => a + b),

例:

[1,2,3].reduce((a, b)=>a+b) // return 6
于 2016-10-04T15:00:16.057 に答える
2

合計と同時に配列を破棄したい場合は、次のようにすることができます(たとえば、stack配列です):

var stack = [1,2,3],
    sum = 0;
while(stack.length > 0) { sum += stack.pop() };
于 2014-02-07T04:24:57.833 に答える
1

配列にはネイティブ マップ メソッドを使用できます。 map メソッド (配列) (JavaScript)

var myData = new Array(['2013-01-22', 0], ['2013-01-29', 0], ['2013-02-05', 0],
             ['2013-02-12', 0], ['2013-02-19', 0], ['2013-02-26', 0], 
             ['2013-03-05', 0], ['2013-03-12', 0], ['2013-03-19', 0], 
             ['2013-03-26', 0], ['2013-04-02', 21], ['2013-04-09', 2]);
var a = 0;
myData.map( function(aa){ a += aa[1];  return a; });

a はあなたの結果です

于 2015-12-31T03:36:10.913 に答える
0

配列の javascript 組み込み reduce は標準ではありませんが、underscore.js を使用できます。

var data = _.range(10);
var sum = _(data).reduce(function(memo, i) {return memo + i});

なる

var sumMyData = _(myData).reduce(function(memo, i) {return memo + i[1]}, 0);

あなたの場合。このフィドルも見てください。

于 2013-11-11T17:35:14.790 に答える