记录JS一些比较实用便捷的小技巧(一)

作者: chouchou723 | 来源:发表于2018-11-19 10:37 被阅读0次

    1.使用Boolean过滤数组中的所有假值
    假值包括:false,null,0,"",undefined,NaN

    const compact = arr => arr.filter(Boolean)
    
    compact([0, 1, false, 2, '', 3, 'a', 'e' * 23, NaN, 's', 34])             // [ 1, 2, 3, 'a', 's', 34 ]
    

    2.取整|0

    1.3 | 0         // 1
    -1.9 | 0        // -1
    

    3.判断奇偶数(&1)
    !!是将值强制转换为boolean值

    const num=3;
    !!(num & 1)                    // true
    !!(num % 2)                    // true
    

    4.精确到指定位数的小数
    (e运算,e相当于10的n次方,5e2=5e+2=510^2,5e-2=510^-2)

    const round = (n, decimals = 0) => Number(`${Math.round(`${n}e${decimals}`)}e-${decimals}`)
    round(1.345, 2)                 // 1.35
    round(1.345, 1)                 // 1.3
    

    5.数字补0操作

    const addZero1 = (num, len = 2) => (`0${num}`).slice(-len)
    const addZero2 = (num, len = 2) => (`${num}`).padStart( len   , '0')
    addZero1(3) // 03
    addZero2(32,4)  // 0032
    
    1. 统计数组中相同项的个数
    var cars = ['BMW','Benz', 'Benz', 'Tesla', 'BMW', 'Toyota'];
    var carsObj = cars.reduce(function (obj, name) {
      obj[name] = obj[name] ? ++obj[name] : 1;
      return obj;
    }, {});
    
    carsObj; // => { BMW: 2, Benz: 2, Tesla: 1, Toyota: 1 }
    

    ..将数组平铺到指定深度

    const flatten = (arr, depth = 1) =>
      depth != 1?arr.reduce((a, v) => a.concat(Array.isArray(v) ? flatten(v, depth - 1) : v), [])
        : arr.reduce((a, v) => a.concat(v), []);
    
    flatten([1, [2], 3, 4]);                             // [1, 2, 3, 4]
    flatten([1, [2, [3, [4, 5], 6], 7], 8], 2);           // [1, 2, 3, [4, 5], 6, 7, 8]
    

    8.使用解构删除不必要属性

    let {_internal, tooBig, ...cleanObject} = {el1: '1', _internal:"secret", tooBig:{}, el2: '2', el3: '3'};
    console.log(cleanObject);                         // {el1: '1', el2: '2', el3: '3'}
    

    相关文章

      网友评论

        本文标题:记录JS一些比较实用便捷的小技巧(一)

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