Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Latest commit

 

History

History
History
 
 

README.md

Outline

18 使用reduce进行时间累加

本篇作者:©大史不说话——Chinasoft Frontend Web Developer

简介:JavaScript30Wes Bos 推出的一个 30 天挑战。项目免费提供了 30 个视频教程、30 个挑战的起始文档和 30 个挑战解决方案源代码。目的是帮助人们用纯 JavaScript 来写东西,不借助框架和库,也不使用编译器和引用。现在你看到的是这系列指南的第 18 篇。完整指南在 GitHub,喜欢请 Star 哦♪(^∇^*)

创建时间:2017-08-25
最后更新:2017-08-29

挑战任务

初始文件index-start.html中提供了一个包含多个列表项的无序列表元素,每一个列表项均添加了data-time属性,该属性用表示了时间。要求将所有的时间累加在一起,并用时:分:秒来表示计算的结果。

实现效果

结果展示

基本思路

1.取得所有lidata-time属性的值,将时间换算为秒并累加求得总时间(单位:秒);
2.手动计算将总时间转化为新的格式“XX小时XX分XX秒”;
3.将结果显示在页面上。

过程指南(以非ES6版本为例)

1.取得所有li标签

var oLi = document.getElementsByTagName('li');

2.遍历li元素节点,取得每个data-time的值并以:为界将其分解为含有两个元素的数组,每个数组中含有两项,第一项为表示分钟的字符串,第二项为表示秒的字符串,将两者进行运算转化为表示秒的数字,并添加进新的数组。

    for( var i = 0, len = oLi.length; i < len; i++){
      var timeItem = oLi[i].dataset['time'].split(':');
      //将时间转换为秒
      times.push(parseInt(timeItem[0],10)*60+parseInt(timeItem[1],10));
    }

3.将新数组times中各项累加

//方法1.因为times为数组类型,故可以直接使用reduce函数进行累加
    return times.reduce(function(a,b){
      return a+b;
    },0);
//方法2.不熟悉reduce函数的也可通过for循环遍历数组各项进行结果累加

4.总时间格式转换

    //总时间对60取余即为不足1分钟的秒数
    var sec = seconds % 60;
    //总时间除以3600并向下取整为小时数
    var hour = Math.floor(seconds/3600);
    //总时间减去前两项即可获得分钟数
    var min = (seconds - 3600*hour - sec)/60;

5.将结果打印在界面上即可

Morty Proxy This is a proxified and sanitized view of the page, visit original site.