最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • 今天,学会这10个JS代码段就够了!

    正文概述 掘金(Vam的金豆之路)   2021-06-30   473

    用 apply 将数组各项添加到另一个数组

    const array = ['a', 'b'];
    const elements = [0, 1, 2];
    array.push.apply(array, elements);
    console.info(array); // ["a", "b", 0, 1, 2]
    

    函数只执行一次

    function once (fn){
      let called = false
      return function () {
        if (!called) {
          called = true
          fn.apply(this, arguments)
        }
      }
    }
    
    function func (){
        console.log(1);
    }
    
    //调用
    let onlyOnce = once(func);
    
    // 测试
    onlyOnce(); // 1
    onlyOnce(); // 不执行
    

    防抖

    /**
     * 防抖
     * @param {Function} func 要执行的回调函数
     * @param {Number} wait 延时的时间
     * @param {Boolean} immediate 是否立即执行
     * @return null
     */
    let timeout;
    function Debounce(func, wait = 3000, immediate = true) {
      // 清除定时器
      if (timeout !== null) clearTimeout(timeout);
      // 立即执行,此类情况一般用不到
      if (immediate) {
        var callNow = !timeout;
        timeout = setTimeout(function() {
          timeout = null;
        }, wait);
        if (callNow) typeof func === 'function' && func();
      } else {
        // 设置定时器,当最后一次操作后,timeout不会再被清除,所以在延时wait毫秒后执行func回调方法
        timeout = setTimeout(function() {
          typeof func === 'function' && func();
        }, wait);
      }
    }
    
    Debounce(()=>console.log(1));
    

    递归数组降为一维

    let children = [1, [2, 3], [4, [5, 6, [7, 8]]], [9, 10]];
    function simpleNormalizeChildren(children) {
                for (let i = 0; i < children.length; i++) {
                    if (Array.isArray(children[i])) {
                        children = Array.prototype.concat.apply([], children);
                        simpleNormalizeChildren(children)
                    }
                }
                return children;
            }
    
    console.log(simpleNormalizeChildren(children)); // [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
    

    数组降维(二维降一维)

    function simpleNormalizeChildren(children) {
                for (let i = 0; i < children.length; i++) {
                    if (Array.isArray(children[i])) {
                        return Array.prototype.concat.apply([], children)
                    }
                }
                return children
    }
    let arrs = [['1'],['3']];
    const arr = simpleNormalizeChildren(arrs);
    console.log(arr); // ['1','3']
    

    使用可选链进行函数调用

    function doSomething(onContent, onError) {
      try {
       // ... do something with the data
      }
      catch (err) {
        onError?.(err.message); // 如果onError是undefined也不会有异常
      }
    }
    

    检测数组对象中是否有空值

    const data = [
      {
      	name:"maomin"
      },
      {
        name:""
      }
    ]
    const arr = data.filter(item =>
        Object.values(item).includes('')
    );
    
    console.log(arr.length>0?"有空值":"无空值"); // 有空值
    

    计算数组中每个元素出现的次数

    let names = ['Alice', 'Bob', 'Tiff', 'Bruce', 'Alice'];
    
    let countedNames = names.reduce(function (allNames, name) {
      if (name in allNames) {
        allNames[name]++;
      }
      else {
        allNames[name] = 1;
      }
      return allNames;
    }, {});
    
    console.log(countedNames); //  { Alice: 2, Bob: 1, Tiff: 1, Bruce: 1 }
    

    按属性对object分类

    let people = [
      { name: 'Alice', age: 21 },
      { name: 'Max', age: 20 },
      { name: 'Jane', age: 20 }
    ];
    
    function groupBy(objectArray, property) {
      return objectArray.reduce(function (acc, obj) {
        let key = obj[property];
        if (!acc[key]) {
          acc[key] = [];
        }
        acc[key].push(obj);
        return acc;
      }, {});
    }
    
    const groupedPeople = groupBy(people, 'age');
    console.log(groupedPeople);
    // {
    //   20: [
    //     { name: 'Max', age: 20 },
    //     { name: 'Jane', age: 20 }
    //   ],
    //   21: [{ name: 'Alice', age: 21 }]
    // }
    

    将带有分割符的字符串转化成一个n维数组

     const str = "A-2-12";
     const str1 = str.split('-');
     console.log(str1);
     const arr = str1.reverse().reduce((pre,cur,i) => {
     if(i==0)
      { pre.push(cur)
       return pre
     }
      return [cur,pre]
    },[])
     
    console.log(arr) // ["A"["B",["C"]]]
    

    起源地下载网 » 今天,学会这10个JS代码段就够了!

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元