将不存在的项目推送到数组
Pushing non existent items to array
所以我有这个数组:
var period = [{"total":852, "date":"2016-03"}, {"total":963, "date":"2016-03"},{"total":789,"date":"2016-02"},{"total":456,"date":"2016-04"},{"total":123,"date":"2016-01"},{"total":723,"date":"2016-01"}];
我需要显示按月份分组的"总"数据。这意味着我必须对数组中重复的月份的"总"金额求和(2016-03、2016-01)。为了找到解决方案,我需要了解为什么这个
for ( var i = 0; i < period.length; i++ ){
if (periodB.indexOf(period[i].date) == -1){
periodB.push(period[i].date);
}
返回此:
["2016-03", "2016-02", "2016-04", "2016-01"]
而这个:
for ( var i = 0; i < period.length; i++ ){
if (periodB.indexOf(period[i].date) == -1){
periodB.push({"date": period[i].date, "total": period[i].total});
}
}
正在返回此:
[{date: "2016-03",total: 1704}, {date: "2016-03", total: 1926}, {date:"2016-02", total: 1578},{date: "2016-04",total: 912}, {date: "2016-01",total: 246}, {date: "2016-01", total: 1446 }]
在第一种情况下,重复的"日期"不会被推送到periodB数组,但在第二种情况下会被推送到。
您可以使用临时对象和一个forEach
循环来解决您的任务
var obj = {};
period.forEach(e => {
var month = e.date.split('-')[1]
obj[month] = obj[month] + e.total || e.total
});
结果将是一个以月份为关键字、以总和为值的对象
{
'03': 1815,
'02': 789,
'04': 456,
'01': 846
}
工作示例:
var period = [{ "total": 852, "date": "2016-03" }, { "total": 963, "date": "2016-03" }, { "total": 789, "date": "2016-02" }, { "total": 456, "date": "2016-04" }, { "total": 123, "date": "2016-01" }, { "total": 723, "date": "2016-01" }];
var obj = {};
period.forEach(e => {
var month = e.date.split('-')[1]
obj[month] = obj[month] + e.total || e.total
});
document.write(JSON.stringify(obj, 0, 2));
相关文章:
- 有没有一种方法可以添加相同的项目val=“0”;4〃;到JavaScript中数组的每个对象
- 按不同项目对对象数组进行排序
- 使用JavaScript或jQuery检查单选按钮选择是否与数组中的项目匹配
- JS:从整个数组中每次得到5个项目,并得到平均值
- 使用圆中的数组更改背景颜色项目
- 编辑CSV数组中的项目-快速CSV node.js
- 我可以限制我添加到数组中的项目数量吗
- 使用javascript/jquery从现有数组中创建一个新数组,该数组保存项目存在的次数
- 什么's JavaScript数组中项目的作用域
- 将项目放入数组中
- 使用 id 和 Javascript 从数组中删除项目
- (角度.js)如何通过过滤器计算数组中有多少项目
- 如何通过迭代对象数组来删除某些项目
- Lodash 从与值数组不匹配的数组中获取项目
- 发布要形成的 n 个项目的数组
- 查找数组中项目包含子字符串的索引
- 我怎么能只保留符合特定条件的数组项目
- 关于将数组项目处理为分区的问题
- Php回显数组项目逐个点击(唯一)
- 连续删除数组项目(游戏障碍)