记录JS一些比较实用便捷的小技巧(一)
2018-11-19 本文已影响0人
chouchou723
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
- 统计数组中相同项的个数
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'}