如同标题那样,现在有个需求是有一个数组需要根据对象属性分组,然后计算求和每组指定属性的值。
如果只是循环,那么也可以没有难度,但咱们编码还是需要尽量符合代码规范的,能不饶弯路何必煞费苦心呢?
直接贴代码
function test(){
//克隆,this.tableData是目标数组
//根据自身需求是否需要克隆,笔者这克隆是为了保护this.tableData数据
var arr = _.cloneDeep(this.tableData);
//注意这里的j不需要自增或自加
for (var j = 0; j < arr.length; ) {
//根据对象某个属性过滤出目标数组
var t = _.filter(arr, { workDate: arr[j].workDate });
var sum = 0;
for (var y = 0, len1 = t.length; y < len1; y++) {
//这里做一下属性判断
if (typeof t[y].workHours != "undefined") {
//目标和相加,得到之后就可以进行你需要的操作了。
sum = sum + t[y].workHours;
}
}
//非常重要的一步,数组的splice方法进行删除数组元素
//上面的j不用改变是因为arr.length会动态变化。
arr.splice(j, t.length);
}
}
题外话
_.cloneDeep()拷贝方法,_.filter()返回一个新的过滤后的数组,都来自Lodash,虽然js原生有clone和筛选数组的方法,但是还是推荐一下Lodash网站,里面还有很多高效包装好的方法,建议学习学习。https://www.lodashjs.com/
大概思路就是这样,注意笔者这里的数组已经是排好序的了,所以可以使用splice()进行删除,可根据自身需要灵活修改,共同努力,共同进步。