带条件的多维数组中的javascript和数组值
javascript sum array values in multidimensional array with conditions
我正试图使用javascript迭代一个对象,并将一个属性分组的值与另一个属性的值相加。以下是我正在迭代的示例数据:
63.450, 2013-01-01 00:00:00, 63.450, 2013, Amex Residuals
3.980, 2013-01-01 00:00:00, 3.980, 2013, Gift Cards on Demand
-16.000, 2013-01-01 00:00:00, -16.000, 2013, Month End Fee Rejects
67.140, 2013-02-01 00:00:00, 67.140, 2013, Amex Residuals
-600.000, 2013-02-01 00:00:00, -600.000, 2013, Bonus Take Back - Closed Less Than 6 Months
-400.000, 2013-02-01 00:00:00, -400.000, 2013, Bonus Take Back - Did Not Activate
8.910, 2013-02-01 00:00:00, 8.910, 2013, Checks On Demand
13997.770, 2013-02-01 00:00:00, 13997.770, 2013, Global Report
-15.000, 2013-02-01 00:00:00, -15.000, 2013, Merchant Adjustments
-34.500, 2013-02-01 00:00:00, -34.500, 2013, Month End Fee Rejects
第二列数据继续包括其他月份(截至10月)。我需要将第一列中每个不同月份的所有值相加,并从第四列的年份创建一个javascript日期,因此结果应该是这样的:
var data = [ [Date.UTC('2013', i, 1), parseFloat('51.43')], [Date.UTC('2013', i, 1), parseFloat(13024.32)] ];
从本质上讲,我应该为每个月的总数提供一个2元素的数组,其中包含第4列中的日期对象。我只是不知道如何对第二列(日期)的条件分组进行迭代求和。
一般流程为:
- 创建一个空物体来保存你的答案
- 穿过每一行
- 从第二个元素中提取月份和年份
- 将值设置为0
- 如果月和年已经在对象中,请将值设置为月和年的值
- 将最新值添加到当前值
- 将对象的月份和年份与值关联
在不知道你的确切结构的情况下,这里有一些半伪代码
var data = {}
for (var i = 0; i < lines.length; ++i) {
var monthYear = lines[i][1].substring(0, 6);
var value = 0;
if (data[monthYear]) {
value = data[monthYear];
}
value += +lines[i][0]; // unary + to make sure the value is a number, not a string
data[monthYear] = value;
}
(显然,如果你有对象而不是数组,你可以适当地访问它们。)
基于@scottmermelstein的答案(我会接受,因为它导致了我这样做),我创建了以下内容,这给了我想要的结果:
var objCalc = {'unCalc':{}, 'reCalc':{}},
objUnCalc = {},
objReCalc = {},
arrUnCalc = [],
arrReCalc = [];
//lets sum up the month totals first, and create the date object that is needed for the graph
$.each(data.TableContainer, function(i,e){
objCalc.unCalc[ e.ActualDate ] = ( objCalc.unCalc[ e.ActualDate ] ? objCalc.unCalc[ e.ActualDate ] + parseFloat(e.GrpTotal) : parseFloat(e.GrpTotal) );
objCalc.reCalc[ e.ActualDate ] = ( objCalc.reCalc[ e.ActualDate ] ? objCalc.reCalc[ e.ActualDate ] + parseFloat(e.GrpBonusAmt) : parseFloat(e.GrpBonusAmt) );
});
//now we iterate over the summed values from above and push them to usable highcharts arrays
$.each(objCalc, function(i,e){
$.each(e, function(y,el){
var arrDate = y.substring(0,y.indexOf(' ')).split('-'), //renders something like ['2013','02','01']
UTC = Date.UTC(arrDate[0], parseInt(arrDate[1])-1, parseInt(arrDate[2])), //subtract 1 from month to make UTC date 0-based
arr = [ UTC, parseFloat( parseFloat( el ).toFixed( 2 ) ) ];
if( i == "unCalc" ) arrUnCalc.push( arr );
if( i == "reCalc" ) arrReCalc.push( arr );
});
});
相关文章:
- 如何遍历包含对象的数组-javascript
- 保存数组javascript
- 查找数组javascript中包含的元素类型
- 算法:从数组(javascript/angular)中按当前日期获取上一个和下一个事件
- 从多维数组javascript中提取特定值
- 如何在数组javascript中选择伪随机值
- 拆分字符串数组(JavaScript)后未定义
- 从数组JavaScript中删除并返回最后n个项的最快方法
- 使用条件for循环更新数组-Javascript
- 从数组javascript创建新对象
- 用数组(javascript)中的值替换regex捕获
- 从数组[Javascript]的总长度中减去一个干净的数字
- 将一个字符串数组解析为一个新的数组javascript
- 如何将对象转换为对象数组javascript
- 赢得't循环数组javascript
- 从不同的数组 JavaScript 中获取值
- 多维数组 JAVASCRIPT 出了点问题
- 可以't分配给一个对象数组javascript
- 比较数组JavaScript中的对象
- 如何完成缺少(连续)元素的数组|Javascript