Javascript的使用小技巧

2019-10-10  本文已影响0人  凌杰991

利用解构来进行数据交换

let a = 1, b = 2
;[a, b] = [2, 1]

判断数据的类型

const isType = (data, type) => {
    const typeObj = {
        '[object String]': 'string',
        '[object Number]': 'number',
        '[object Boolean]': 'boolean',
        '[object Null]': 'null',
        '[object Undefined]': 'undefined',
        '[object Object]': 'object',
        '[object Array]': 'array',
        '[object Function]': 'function',
        '[object Date]': 'date', // Object.prototype.toString.call(new Date())
        '[object RegExp]': 'regExp',
        '[object Map]': 'map',
        '[object Set]': 'set',
        '[object HTMLDivElement]': 'dom', // Object.prototype.toString.call(document.querySelector('#app'))
        '[object NodeList]': 'nodeList', // Object.prototype.toString.call(document.querySelectorAll('div'))
        '[object WeakMap]': 'weakMap',
        '[object WeakSet]': 'weakSet',
        '[object Window]': 'window',  // Object.prototype.toString.call(window)
        '[object Error]': 'error', // new Error('1')
        '[object Arguments]': 'arguments',
    }
    let name = Object.prototype.toString.call(data) // 借用Object.prototype.toString.call()获取数据类型
    let typeName = typeObj[name] || '未知类型' // 匹配数据类型
    return typeName === type // 判断该数据类型是否为传入的类型
}

获取纯数字数组的最大最小值,主要使用apply来传递参数

const arr = [15, 6, 12, 13, 16] 
const max = Math.max.apply(Math, arr) // 16
const min = Math.min.apply(Math, arr) // 6

数组去重

const arr = [1, 2, 2, 3]
// ① Set
const arr1 = [...new Set(arr)]
// ② Filter 
const arr2 = arr.filter((item, index) => arr.indexOf(item) === index)
// ③ Reduce
const arr3 = arr.reduce((unique, item) => unique.includes(item) ? unique : [...unique, item], [])

将伪数组(具有length属性的非Array的Object)转为数组

// ①
[...arguments]
// ②
[].slice.call(arguments)
// ③
Array.from(arguments)
// ④
Array.prototype.slice.call(arguments)

对象数组(形如:[{}, {}])根据key值去重

let arr = [
    {
        key: 1,
        value: '1'
    },
    {
        key: 2,
        value: '2'
    },
    {
        key: 1,
        value: '1'
    }
]

// ①
let obj = {}
arr = arr.reduce((item, next) => {
    obj[next.key] ? '' : obj[next.key] = true && item.push(next)

    return item
}, [])

// ②
let obj = {}
let newArr = []
for (let i = 0; i < arr.length; i++) {
    if (!obj[arr[i].key]) {
        newArr.push(arr[i])
        obj[arr[i].key] = true
    }
}
上一篇下一篇

猜你喜欢

热点阅读