次のようなnew Array
であるmyData
という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つあります。その後、それに基づいて比較したいと思います。それが可能であれば、この種のアクションに最も適した方法ですか?
以下を試してください
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
Array.reduce
メソッドを使用できます:
const myData = [
['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]
];
const sum = myData
.map( v => v[1] )
.reduce( (sum, current) => sum + current, 0 );
console.log(sum);
MDN を参照してください
最も簡単な方法は次のようになると思います:
values.reduce(function(a, b){return a+b;})
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 で利用可能
Sumメソッドを作成するとうまくいきます。合計関数を配列に追加できます
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) {
に変更すると、this
はarr
になります
またはES6で
values.reduce((a, b) => a + b),
例:
[1,2,3].reduce((a, b)=>a+b) // return 6
加算と同時に配列を破棄する場合は、次のようにします(たとえば、stack
は配列です)。
var stack = [1,2,3],
sum = 0;
while(stack.length > 0) { sum += stack.pop() };
配列にはネイティブマップメソッドを使用できます。 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はあなたの結果です
古い方法(引数/パラメーターの長さを変更しない場合)
>> function sumla1(){
result=0
for(let i=0; i<arguments.length;i++){
result+=arguments[i];
}
return result;
}
>> sumla1(45,67,88);
>> 200
ES6(配列の構造化)
>> function sumla2(...x){return x.reduce((a,b)=>a+b)}
>>
>> sumla2(5,5,6,7,8)
>>
>> 31
>>
>> var numbers = [4, 9, 16, 25];
>> sumla2(...numbers);
>> 54
配列の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);
あなたの場合。これもご覧ください fiddle も。