美文网首页
ES6解决问题的代码总结

ES6解决问题的代码总结

作者: 小卟啾 | 来源:发表于2021-03-17 16:07 被阅读0次

    如何分辨设备是移动设备还是桌面设备?

    const detectDeviceType = () => 
     /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent) 
     ? 'Mobile' 
     : 'Desktop'; 
     // 例如
     detectDeviceType(); // "Mobile" or "Desktop"
    

    如何获取当前页面的滚动位置?

    const getScrollPosition = (el = window) => ({ 
     x: el.pageXOffset !== undefined ? el.pageXOffset : el.scrollLeft, 
     y: el.pageYOffset !== undefined ? el.pageYOffset : el.scrollTop 
     }); 
     // Example 
     getScrollPosition(); // {x: 0, y: 200}
    

    如何平滑滚动到页面顶部?

    const scrollToTop = () => { 
     const c = document.documentElement.scrollTop || document.body.scrollTop; 
     if (c > 0) { 
     window.requestAnimationFrame(scrollToTop); 
     window.scrollTo(0, c - c / 8); 
     } 
     }; 
     // Example 
     scrollToTop();
    

    如何创建一个包含当前 URL 参数的对象?

    const getURLParameters = url => 
     (url.match(/([^?=&]+)(=([^&]*))/g) || []).reduce( 
     (a, v) => ((a[v.slice(0, v.indexOf('='))] = v.slice(v.indexOf('=') + 1)), a), 
     {} 
     ); 
     // Examples 
     getURLParameters('http://url.com/page?n=Adam&s;=Smith'); // {n: 'Adam', s: 'Smith'} 
     getURLParameters('google.com'); // {}
    

    如何将一组表单元素编码为一个对象?

    const formToObject = form => 
     Array.from(new FormData(form)).reduce( 
     (acc, [key, value]) => ({ 
     ...acc, 
     [key]: value 
     }), 
     {} 
     ); 
     // Example 
     formToObject(document.querySelector('#form')); 
    

    如何获取两个日期之间的天数间隔?

    const getDaysDiffBetweenDates = (dateInitial, dateFinal) => 
     (dateFinal - dateInitial) / (1000 * 3600 * 24); 
     // Example 
     getDaysDiffBetweenDates(new Date('2017-12-13'), new Date('2017-12-22')); // 9
    

    脱敏处理

    在一些涉及到用户隐私情况下,可能会遇到对用户的手机号身份证号之类的信息脱敏,但是这个脱敏数据的规则是根据用户信息要脱敏字段动态的生成的,此时我们动态拼接正则来实现一个动态脱敏规则

    const encryptReg = (before = 3, after = 4) => {
      return new RegExp('(\\d{' + before + '})\\d*(\\d{' + after + '})');
    };
    let str='410111111111904721'
    let str2='17343212325'
    console.log(str2.replace(encryptReg(2,2),'$1******$2'))//17******25
    console.log(str.replace(encryptReg(),'$1****$2'))// 410****4721
    

    数组分组

    开发移动端的时候,遇到一个首页菜单改版的需求,首页菜单根据权限控制显隐,而菜单每页展示八个小菜单,超过八个做 swipe 滑动切换,当时项目用了 vant 做的 UI 框架,菜单那模块就选择了他的轮播插件,菜单做成了一个扁平化的 list 配置,首先根据权限过滤出所有有权限的菜单项,然后每八个一分组,处理成一个二维数据来遍历菜单

    const arrayGroupBySize = (arr, size = 2) => {
      const result = [];
      for (let i = 0, len = arr.length; i < len; i += size) {
        result.push(arr.slice(i, i + size));
      }
      return result;
    };
    console.log(arrayGroupBySize(['张三','李四','王五']))
    //(2) [Array(2), Array(1)]
    

    扁平化数组

    let requestArr=arrayGroupBySize(['张三','李四','王五'])
    //扁平化数组
    console.log(requestArr.flat())
    

    数组去重:

    可以使用 JavaScript 中的Set轻松删除重复项
    const removeDuplicates = (arr) => [...new Set(arr)];
    console.log(removeDuplicates([1, 2, 3, 3, 4, 4, 5, 5, 6]));
    // Result: [ 1, 2, 3, 4, 5, 6 ]
    

    相关文章

      网友评论

          本文标题:ES6解决问题的代码总结

          本文链接:https://www.haomeiwen.com/subject/ookzqltx.html