常用的11个js技巧

123 阅读2分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第3天,点击查看活动详情

常用的ES6方法

一、解构

一般情况下拿到的后端返回的数据

const userInfo = {
  name: '张三',
  age: '100',
  sex: '男',
  profession: '掏粪工',
  relatives: {
    sister: '姐姐',
    brother: '哥哥'
  }
}
const data = {
  code: 200,
  msg: '成功',
  data: userInfo
}
const name = data.data.name
const age = data.data.name

如果想获取name和age的话,通常使用的方法

const name = data.data.name
const age = data.data.name

但是这个看上去也重复了很多,比如data.data这些,或者说我们想拿他的亲属关系 使用解构的方式

const { name, age, sex, profession: pro } = data.data

通过解构拿到参数的值,也可以给他换个命名,一举多得

二、字符拼接${val}

以前的拼接

let str = '他的名字叫: ' + name

使用ES6语法后

let str1 = `他的名字叫: ${name}`

修改后长的更好看了,出来混的,好看很重要。

三、数组合并[...arr1, ...arr2]

之前数组合并

let arr1 = [1, 2, 3, 4], arr2 = [3, 4, 5, 6, 7]
let newArr = arr1.concat(arr2)

ES6的数组合并

let newArr1 = [...arr1, ...arr2]

四、去重 new Set()

使用new Set去重

let newArr1 = [...new Set([...arr1, ...arr2])] 

五、对象合并Object.assign({}, obj)

之前操作

let obj1 = {name: '张三'}, obj2 = { age: '25' }
let obj3 = {
  name: obj1.name,
  age: obj2.age
}

ES6操作

let obj1 = {name: '张三'}, obj2 = { age: '25' }
let obj = Object.assign({}, obj1, obj2)

六、可选链操作符

obj?.name

如果存在就返回值,不存在了会返回undefined

七、空值合并操作符

如果存在就返回值,不存在就返回默认值

const name1 = obj2?.name ?? '王五' // 王五

八、字符1转number

通过+号,修改str为number

const strNum1 = '1'
console.log(typeof(+strNum1)) // number

九、解析嵌套数组flat

之前操作

let str3 = [1, 3, 4, [5, 6, 7, [9, 10, 11, [12, 13]]]]
let str4 = str3.reduce((pre, val) => pre.concat(val), [])

image.png

能看到的是,我们只能解析一层

如果要解析多层,还需要递归循环

function flatDeep(arr, d = 1) {
    return d > 0 ? arr.reduce((acc, val) => acc.concat(Array.isArray(val) ? flatDeep(val, d - 1) : val), []) : arr.slice();
};

这里可以使用flat

let str5 = str3.flat(Infinity)
console.log(str5)

image.png

十、fill填充数组

fill的参数第一个是填充值,第二个是起始点,第三个是终止点,填充不包含终止点

let arr3 = [1,2,3,4,5,6,7,8,9].fill(0, 0,3) //  [0, 0, 0, 4, 5, 6, 7, 8, 9]

十一、并存多个判断用includes()

// 判断 如果num = 1, 3, 4, 6时通过
const numArr1 = [1, 3, 4, 6]
const num = 1
if(numArr1.includes(num)) {
  console.log('通过')
}

十二、状态管理 new Map()

如果有多种状态,常用的方法是

const status1 = 1
let status1Text
if (status1 === 1) {
  status1Text = '状态1'
} else if (status1 === 2) {
  status1Text = '状态2'
} else if (status1 === 3) {
  status1Text = '状态3'
} else if (status1 === 4) {
  status1Text = '状态4'
}

优化后

// 更好的写法
const statusMap = new Map([
  [1, '状态1'],
  [2, '状态2'],
  [3, '状态3'],
  [4, '状态4'],
])
status1Text  = statusMap.get(status1)

十三、Object.keys()、Object.values()、Object.entries()

对对象进行操作

const userInfo = {
  name: '张三',
  age: '100',
  sex: '男',
  profession: '掏粪工',
  relatives: {
    sister: '姐姐',
    brother: '哥哥'
  }
}
let keys = Object.keys(userInfo)
let values = Object.values(userInfo)
let entries = Object.entries(userInfo)
console.log(keys, values, entries)

结果

image.png 暂时只有这么些,不足之处,敬请留言!!!