一、检测是否为数组
1、instanceof 方法
const arr = new Array() // const arr = []
arr instanceof Array //true
2、constructor 属性
返回对象相对应的构造函数。
3、isArray() 方法
const arr = new Array()
Array.isArray(arr) //true
二、数组与字符串相互转换
1、数组转字符串:join()
const arr = ["1","2","3"]
const arrToString = arr.join(',')
console.log(arrToString) //1,2,3
2、字符串转数组:split()
const str = '1,2,3'
const stringToArr = str.split(',')
console.log(stringToArr) //["1","2","3"]
三、数组反转
reverse()对原数组操作并返回经过处理后的原数组
const arr = ["1","2","3"]
const arrReverse = arr.reverse()
console.log(arrReverse) //["3","2","1"]
四、数组去重
[...new Set(arr)]
const arr = ["1","2","3","1"]
const newArr = [...new Set(arr)]
console.log(newArr) //["2","3","1"]
五、数组排序
arr.sort()
:对原数组操作并返回经过处理后的原数组
sort()方法用于对数组的元素进行排序,并返回原数组。如果不带参数,按照字符串UniCode码的顺序进行排序
//不带参数
const arr = ["a","c","b","d"]
const newArr = arr.sort()
console.log(newArr) //["a", "b", "c", "d"] //带参数
const arr2 = [1,3,2,0]
let ASCarr = arr2.sort((a, b) => a - b); let arrs = [1, 10, 2, 12];
let DESarr = arrs.sort((a, b) => b - a) // 降序排列 [12,10,2,1]
console.log(ASCarr) //[0,1,2,3]
console.log(DESarr) //[12,10,2,1]
六、元素在数组中的位置
1、find():找出第一个符合条件的数组元素,满足true即返回,不再执行
[1,-2,-3].find(v=>v<0)//-2
2、includes():是否包含指定的值,同样适用于字符串
[1,-2,-3].includes(1) //true
3、startsWith():是否以指定的值开头
'hellow'.startsWith('he') //true
4、endsWith():是否以指定的值结尾
'hellow'.endsWith('ow')
七、数组的遍历与迭代
1、arr.filter():返回符合条件的新数组
const arr = [1,2,3,4,5]
const filterArr = arr.filter(v=>v>3)
console.log(filterArr) //[4,5]
2、arr.every():判断所有元素是否满足条件,只有全部为true才返回true
const arr = [1,2,3,4,5]
const everyArr = arr.every(v=>v>0)
console.log(everyArr) //true
3、arr.some():判断是否存在元素满足条件,只要有一个为true就返回true
const arr = [1,2,3,4,5]
const someArr = arr.some(v=>v>4)
console.log(someArr) //true
4、arr.map():循环数组,每个元素经过回调函数操作后的返回值组成一个新的数组返回
const arr = [1,2,3,4,5]
const mapArr = arr.map(v=>v+1)
console.log(mapArr) //[2,3,4,5,6]
5、array.forEach(callbak)为数组的每个元素执行对应的方法。
let a = [1, 2, 3, 4, 5];
let b = [];
a.forEach((item) => { b.push(item + 1); });
console.log(b); // [2,3,4,5,6]
八、扩展运算符
...
:将一个数组转为用逗号分隔的参数序列。
console.log(...[1,2,3]); // 1 2 3
八、Object.values()、Object.keys()、Object.entries();
Object.values():对象转数组
Object.values({a:1,b:2,c:3})===>[1,2,3]
Object.entries():对象转数组
Object.entries({a:1,b:2,c:3})===>[[a,1],[b,2],[c,3]]
Object.keys()的用法
// 1. 定义一个对象
var obj = { 0:'熊大',1:'熊二',2:'光头强' }
// 2. 使用Object.keys()方法
var keyValue = Object.keys(obj)
// 3. 打印结果
console.log(keyValue) // 得到是:["0","1","2"]
八、修改了正则表达式的一些属性
const reg = /(year[0-9]{4})-(month[0-9]{2})-(day[0-9]{2})/;
const match = reg.exec(2021-02-23);
九、增加字符串的replactAll方法,之前要实现替换全部,需要使用正则表达式
const str = 'hello world';
str.replaceAll(l, ); // heo word // 之前
const str = '2-4-6-8-10';
const newStr = str.replace(/\-/g, '+');
console.log(newStr); //2+4+6+8+10 // 现在可以
const str = '2-4-6-8-10';
const newStr = str.replaceAll('-', '+');
console.log(newStr); //2+4+6+8+10
十、增加字符串的replactAll方法,之前要实现替换全部,需要使用正则表达式
• 逻辑或赋值(||= ),
逻辑或赋值运算符 (x ||= y) 是在 x 是 false时对其赋值.• const a = { duration: 50, title: '' };
a.duration ||= 10;
console.log(a.duration); // 50
a.title ||= 'title is empty.';
console.log(a.title ); // "title is empty"• 逻辑空赋值(??=)
逻辑空赋值运算符 (x ??= y) 仅在 x 是 (null 或 undefined) 时对其赋值。• 逻辑与赋值(&&=)
(x &&= y) 仅仅当x为true时起作用,对其赋值 let a = 1;
let b = 0;
a &&= 2;
console.log(a); // expected output: 2
b &&= 2;
console.log(b); // expected output: 0
• 空值合并操作符(??)
当左侧的操作数为 null 或者 undefined 时,返回其右侧操作数,否则返回左侧操作数。不能与 AND 或 OR 操作符共用• const foo = null ?? 'default string';
console.log(foo);
// expected output: "default string"
const baz = 0 ?? 42;
console.log(baz);
// expected output: 0
const foo2 = '' ?? 'default string';
// ''
• 可选链式操作符(?.)
允许读取位于连接对象链深处的属性的值,而不必明确验证链中的每个引用是否有效。?. 操作符的功能类似于 . 链式操作符,不同之处在于,在引用为空(nullish ) (null 或者 undefined) 的情况下不会引起错误,该表达式短路返回值是 undefined。与函数调用一起使用时,如果给定的函数不存在,则返回 undefined