ES6常用方法汇总记录

1、Array.prototype.includes()

includes()方法用来判断一个数组中是否包含某个指定的值,包含则返回 true,否则返回 false

let arr = ['leo', 'lion', 'ggj']
console.log(arr.includes('leo'))    // true
console.log(arr.includes('gao'))    // false
console.log(arr.includes('ggj',1))    // true
 
console.log(arr.includes('Leo'))    // false
 
// 注意:使用includes()查找字符串是区分大小写的。

在多条件的 if 判断语句中,常规写法或许是

if(type == 1 || type == 2 || type == 3 || type == 4){
   //...
}

乍一看,未免有些繁琐,使用ES6数组实例方法 includes ,可以避免这样的窘境

let conditionList = [1,2,3,4];
 
if(conditionList.includes(type)){
   //...
}

2、Array.prototype.flat()

flat()会按照一个可指定的深度递归遍历数组,并将所有元素与遍历到的子数组中的元素合并为一个新数组返回(数组扁平化)

let arr1 = [0, 1, 2, [3, 4]];
console.log(arr1.flat());   // [0, 1, 2, 3, 4]
 
let arr2 = [0, 1, 2, [[[3, 4]]]];
console.log(arr2.flat(2));  // [0, 1, 2, [3, 4]]
console.log(arr2.flat(3));  // [0, 1, 2, 3, 4]
 
//使用 Infinity,可展开任意深度的嵌套数组
let arr3 = [1, 2, [3, 4, [5, 6, [7, 8, [9, 10]]]]];
arr3.flat(Infinity);   // [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
 
// flat()方法会移除数组中的空项
let arr5 = [1, 2, , , 4, 5];
arr5.flat();   // [1, 2, 4, 5]

3、Array.prototype.flatMap()

flatMap() 首先使用映射函数映射每个元素,然后将结果压缩成一个新数组。顾名思义,它包含两部分功能一个是 map,一个是 flat(深度为1)

let newArr = arr.flatMap(function callback(currentValue[, index[, array]]) {
    // 返回新数组的元素
}[, thisArg]);
 
// currentValue,当前正在数组中处理的元素
// index可选,数组中正在处理的当前元素的索引
// array可选,被调用的 map 数组
// thisArg,执行callback函数时 使用的this值

//举例
let numbers = [1, 2, 3];
numbers.map(x => [x * 2]);   // [[2], [4], [6]]
numbers.flatMap(x => [x * 2]);   // [2, 4, 6]

//flatMap()与 map()和深度depth为1的 flat()几乎相同
let arr = ['leo', '', '早上好']
arr.map(s => s.split(''));   //[["l", "e", "o"],[""],["早", "上", "好"]]
arr.flatMap(s => s.split(''));   // ["l", "e", "o", "", "早", "上", "好"]

4、Object.values()

Object.values()返回一个新数组,里面的成员是传入的参数对象自身的(不含继承的)所有可遍历属性对应的值

let obj = {
  name: "leo",
  age: 18,
  like: "music"
};
console.log(Object.values(obj));   // [ 'leo', 18, 'music' ]

5、Object.entries()

Object.entries()方法返回一个新数组,里面的成员是传入的参数对象自身的(不含继承的)所有可遍历属性的键值对数组

let obj = {
  name: "leo",
  age: 18,
  like: "music"
};
console.log(Object.entries(obj));   // [ [ 'name', 'leo' ], [ 'age', 18 ], [ 'like', 'music' ] 

扩展:Object.keys()方法返回一个新数组,里面的成员是传入的参数对象自身的(不含继承的)所有可遍历的属性

let obj = {
  name: "leo",
  age: 18,
  like: "music"
};
console.log(Object.keys(obj));   // [ 'name', 'age', 'like' ]
 
// 注意:如果传入的参数是数组,则返回的是所有可遍历的索引。

 6、Object.fromEntries()

Object.fromEntries() 把键值对列表转换为一个对象,此方法和Object.entries() 相对的(逆操作)

let arr = [ ['a', 1], ['b', 2] ];
let obj = Object.fromEntries(arr);
console.log(obj);   // {a: 1, b: 2}

7、String.prototype.padStart

把指定字符串填充到字符串头部,返回新字符串。

'abc'.padStart(10);   // "       abc",填充默认值""
 
'abc'.padStart(10, "*");   // "*******abc"
 
'abc'.padStart(6,"123465");   // "123abc"
 
'abc'.padStart(1);   // "abc"

举例

日期格式化:yyyy-mm-dd的格式

let date = new Date();
let year = date.getFullYear();
// 月日如果是一位前面给它填充一个0
let month = (date.getMonth() + 1).toString().padStart(2, '0');
let day = (date.getDate()).toString().padStart(2, '0');
console.log( `${year}-${month}-${day}` );   // 2022-01-09

数字替换(手机号,银行卡号等)

let tel = '18937640746'
let newTel = tel.slice(-4).padStart(tel.length, '*')
console.log(newTel) // *******0746

8、String.prototype.padEnd

把指定字符串填充到字符串尾部,返回新字符串。

语法与padStart相同

'abc'.padEnd(10);   // "abc       ",填充默认值""
 
'abc'.padEnd(10, "*");   // "abc*******"
 
'abc'.padEnd(6, "123456");   // "abc123"
 
'abc'.padEnd(1);   // "abc"

9、String.prototype.trimStart()

trimStart()从字符串的开头删除空格,trimLeft()是它的别名

let str = '   leo';
console.log(str.length);   // 6
str = str.trimStart();   // 或str.trimLeft()
console.log(str.length);   // 3

10、String.prototype.trimEnd()

trimEnd()从一个字符串的末尾删除空格,trimRight()是它的别名

let str = 'leo   ';
console.log(str.length);   // 6
str = str.trimEnd();   // 或str.trimRight()
console.log(str.length);   // 3

11、String.prototype.matchAll()

matchAll()返回一个包含所有匹配正则表达式的结果及分组捕获组的迭代器

let regexp = /t(e)(st(\d?))/g;
let str = 'test1test2';
 
let arr = [...str.matchAll(regexp)];   // 返回所有匹配上的
console.log(array[0]);   // ["test1", "e", "st1", "1"]
console.log(array[1]);   // ["test2", "e", "st2", "2"]

12、String.prototype.replaceAll()

replaceAll()返回一个新字符串,新字符串中所有满足 pattern 的部分都会被替换。pattern可以是一个字符串或一个正则表达式

let str = 'aabbcc'.replaceAll('b', '*');
console.log(str);   // 'aa**cc'

//使用正则表达式搜索值时,它必须是全局的

'aabbcc'.replaceAll(/b/, '*');   // 报错

//修改如下

'aabbcc'.replaceAll(/b/g, '*');   // "aa**cc"

13、Array.find

find 可以在找到满足条件的项之后,退出遍历,有助于性能优化

let a = [1,2,3,4,5];
let result = a.find(item =>{
    return item === 3
})

14、 Array.filter

在项目中,一些没分页的列表的搜索功能由前端来实现,搜索一般分为精确搜索和模糊搜索。搜索也要叫过滤,一般用 filter 来实现

let a = [1,2,3,4,5];
let result = a.filter(item =>{
    return item === 3
})

15、Rest & Spread

Spread例子

let text = {
  a: 1,
  b: 2,
  c: 3,
}
 
let newText = {
  ...text,
  c: 4
}
 
console.log(newText);   // {a: 1, b: 2, c: 4}

这块代码展示了 spread 语法,可以把 text 对象的数据都拓展到 newText 对象,这个功能很实用。需要注意的是,如果存在相同的属性名,后面的会把前面的覆盖。

如果属性的值是一个对象的话,该对象的引用会被拷贝,而不是生成一个新的对象

let obj = { x: { y: 10 } };
let copy1 = { ...obj };
let copy2 = { ...obj };
obj.x.y = "leo";
console.log(copy1, copy2);   // {x: {y: "leo"}}  {x: {y: "leo"}}
console.log(copy1.x === copy2.x);   // true,x为同一个引用

rest 例子

let text = {
  a: 1,
  b: 2,
  c: 3
}
 
let { a, ...rest } = text
 
console.log(a, rest);   // 1 {b: 2, c: 3}

当对象 key-value 不确定的时候,把必选的 key 赋值给变量,用一个变量接收其他可选的 key 数据,这在之前是做不到的。注意,rest 属性必须始终出现在对象的末尾,否则将抛出错误。

16、解构赋值

我们在一个程序中,经常会进行取值操作,如从某个对象obj中取值

let obj = {
    a:1,
    b:2,
    c:3
}
//ES5取值
let a = obj.a;
let b = obj.b;
let c = obj.c;

//ES6的解构赋值,写法如下
let {a,b,c} = obj;

//不过有一种情况是,服务端返回的数据对象中的属性名不是我想要的,这样取值,不是还得重新创建个遍历赋值?当然不是,解构赋值中有一种写法,可以完美解决这个的问题
let {a:a1,b,c} = obj;
 
// 此时相当于拿到属性a,变成我们想要的属性名a1
console.log(a1)

//注意:ES6的解构赋值虽然好用,但是解构的对象不能为undefined、null,否则会报错,所以要给被解构的对象一个默认值
let {a,b,c} = obj || {};

17、扩展运算符(...)

比如合并两个数组或者两个对象(多个如此)

ES5写法

let a = [1,2,3];
let b = [1,5,6];
let c = a.concat(b);   // [1,2,3,1,5,6]
 
let obj1 = {
  a:1
}
let obj2 = {
  b:1
}
let obj = Object.assign({}, obj1, obj2);    // {a:1,b:1}

ES6写法

let a = [1,2,3];
let b = [1,5,6];
let c = [...new Set([...a, ...b])];   // [1,2,3,5,6]
 
let obj1 = {
  a:1
}
let obj2 = {
  b:1
}
let obj = {...obj1,...obj2};   // {a:1,b:1}

18、模板字符串

//目前已会使用模板字符串,类似于
let name = 'leo';
let score = 66;
let result = '';
if(score > 60){
  result = `${name}的考试成绩合格,分数为${score}`; 
}else{
  result = `${name}的考试成绩不合格,分数为${score}`; 
}
console.log(result);   // leo的成绩合格,分数为66

//在 ${} 中可以放入任意的JavaScript表达式,可以进行运算,以及引用对象属性
let name = 'leo';
let score = 66;
let result = `${name}${score > 60 ? '的考试成绩合格' : '的考试成绩不合格'}`;  //${}里面为表达式

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值