我有一个数组,这个数组的长度不定,格式如下:
[
{'name':'hj1','optime':'2:27'},
{'name':'hj2','optime':'3:38'},
{'name':'hj3','optime':'0:41'},
{'name':'hj4','optime':'0:6'},
{'name':'hj5','optime':'8:17'},
{'name':'hj6','optime':'0:15'},
{'name':'hj7','optime':'2:46'},
{'name':'hj8','optime':'0:7'},
{'name':'hj9','optime':'1:25'},
]
其中,optime就是工作耗时,格式为??小时:分钟。现在我想对这个数组进行求和(该例子的总耗时是19:42),如何实现。
###[
{'name':'hj1','optime':'2:27'},
{'name':'hj2','optime':'3:38'},
{'name':'hj3','optime':'0:41'},
{'name':'hj4','optime':'0:6'},
{'name':'hj5','optime':'8:17'},
{'name':'hj6','optime':'0:15'},
{'name':'hj7','optime':'2:46'},
{'name':'hj8','optime':'0:7'},
{'name':'hj9','optime':'1:25'},
].reduce((s,n)=>{
// console.log(n.optime.match(/(\d+):(\d+)/))
var time = n.optime.match(/(\d+):(\d+)/)
s+= +time[1]*60 + (+time[2])
return s;
}, 0)
###没明白是没仔细思考还是咋的,String.prototype.split
函数可用来分割字符串,获得小时/分钟。遍历一次完事。
你这里最小单位是分钟,所以可以以分钟为单位,求取总分钟
比如2:27
那就是 2 * 60 + 27
,这么累计最会得到总分钟count(按你说的应该是19 * 60 + 42)
然后 h = count / 60 | 0, m = count % 60
可以先转换成second,然后求和,然后在转换成mins。
const totalSecs = [
{ name: "hj1", optime: "2:27" },
{ name: "hj2", optime: "3:38" },
{ name: "hj3", optime: "0:41" },
{ name: "hj4", optime: "0:6" },
{ name: "hj5", optime: "8:17" },
{ name: "hj6", optime: "0:15" },
{ name: "hj7", optime: "2:46" },
{ name: "hj8", optime: "0:7" },
{ name: "hj9", optime: "1:25" }
].reduce((secs, { optime }) => {
const timeArr = optime.split(":");
const ret = parseInt(timeArr[0], 10) * 60 + parseInt(timeArr[1], 10);
return secs + ret;
}, 0);
console.log(parseInt(totalSecs / 60, 10) + ":" + (totalSecs % 60));