JS 数组对象如何使用Array.reduce

数组对象如何使用reduce将每个对象的属性累加求和

需求: 现有一个数组对象,[{date:‘2020-03-29 12:12’, count: 12}, {date: ‘2020-03-28 13:12’, count: 23}], 需要求所有天数的sum(count)
使用技术: Array.reduce()

/*
** reduce 函数接收四个参数, 分别是total,currentValue, index,arr
** total 必需。初始值, 或者计算结束后的返回值。
** currentValue 必需。当前元素
** currentIndex 可选。当前元素的索引
** arr 可选。当前元素所属的数组对象。
*/
const dateArray = [
	{date:'2020-03-29 12:12', count: 12},
	{date: '2020-03-28 13:12', count: 23}
];
const numberPattern = /^[+-]?\d+(\.\d+)?$/;
const totalCount = dateArray .reduce((total, currentValue, currentIndex, arr) => {
                    const countMatched = numberPattern.exec(currentValue.count);  // 加这一步的原因是怕某些数据可能还包含其他文字,导致不能累加, 所以加上这一步将数字匹配出来
                    let count = 0; // 这里指的是count不是Number, 就默认为0
                    if (countMatched) {
                        count = parseFloat(countMatched[0]); // 这里是指将match到的数字(字符串)转化为Number类型
                    }
                    return total + count;
                }, 0);
               

【后续】
这里有一点需要注意的是parseFloat()的用法,它的参数一定要是以数字开头的字符串(当然直接是Number类型更好),否则parseFloat的结果就是NaN.比如: parseFloat(’“1233”’)或者parseFloat(’_11’), 这样就不行,结果为NaN. 但是*parseFloat(’.11’)*这样是可以的,返回0.11. 这也是我在处理数据的时候遇到踩的一些坑啦, 希望大家不要遇到哦!

你可能感兴趣的:(javaScript)