Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 修改以减少es6_Javascript_Arrays_Ecmascript 6_Reduce - Fatal编程技术网

Javascript 修改以减少es6

Javascript 修改以减少es6,javascript,arrays,ecmascript-6,reduce,Javascript,Arrays,Ecmascript 6,Reduce,我想收集所有带有文本内容flexbox的li,并在秒内减少总时间并返回它。我做到了,但是如何将代码重写为一个reduce函数。结果应该是以秒为单位的数据时间总和 html 我会过滤,然后减少,因为它更具功能性和可读性: const list items=[…document.querySelectorAll('li'); const flexBoxTime=listItems .filter(item=>item.textContent.includes('Flexbox')) .减少((上一

我想收集所有带有文本内容flexbox的li,并在秒内减少总时间并返回它。我做到了,但是如何将代码重写为一个reduce函数。结果应该是以秒为单位的数据时间总和

html


我会过滤,然后减少,因为它更具功能性和可读性:

const list items=[…document.querySelectorAll('li');
const flexBoxTime=listItems
.filter(item=>item.textContent.includes('Flexbox'))
.减少((上一个,项目)=>{
常量[min,sec]=item.dataset.time.split(“:”);
返回上一次+(+分钟*60)+秒
}, 0);
console.log(flexBoxTime)
Flexbox视频

  • Redux视频
  • 另一种方法是使用旧式for循环(是的,我不回答这个问题):


    小型化和稍微优化的备选方案:

    const time=[].reduce.call(document.getElementsByTagName('li'),(r,v)=>v.textContent
    .includes('Flexbox')?(v=v.dataset.time.split(':'),v[0]*60++v[1]+r):r,0)
    console.log(时间)
    Flexbox视频
  • Redux视频
    <li data-time="3:07">Flexbox Video</li>
    <li data-time="5:59">Redux Video</li>
    ...
    
    const listItems = [...document.querySelectorAll('li')];
    
    const flexBoxItem = listItems
        .filter(item => item.textContent.includes('Flexbox'))
        .map(item => item.dataset.time)
        .map(item => {
            let parts = item.split(':').map(i => parseFloat(i))
            return (parts[0] * 60) + parts[1]
        })
        .reduce((prev, next) => prev + next, 0)
    
     let result = 0;
     for(const item of listItems){
       if(!item.textContent.includes('Flexbox'))
          continue;
       const [mins, secs] = item.dataset.time.split(":");
       result += mins * 60 + +secs;
     }