数组构造器
Array构造器用来创建一个新的数组,语法:
- new Array(arg1,arg2,arg2,…);
- new Array(len)
ES6新增两个构造方法:
- Array.of(),将参数依次转化为数组中的一项,最后返回该数组。
console.log(Array.of("90")); // [ '90' ]
console.log(Array.of(9.00));//[ 9 ]
- Array.from(),从一个类数组中的可迭代对象中创建一个数组实例。
const obj = {0:"a",1:"b",2:"c",length:3}
const arr1= Array.from(obj,(value)=>{
return value.repeat(3)
},obj)
console.log(arr1);//[ 'aaa', 'bbb', 'ccc' ]
改变数组本身的方法
pop、push、reverse、shift、sort、splice、unshift、copyWithin和fill
未改变数组本身的方法
concat、join、slice、toString、toLocaleString、indexOf、lastIndexOf、includes
遍历数组的方法
forEach、every、some、filter、map、reduce、reduceRight、entries、find、findIndex、keys、values
类数组
arguments对象,只定义在函数体内,它包含了函数的参数和其他属性
function func(name,age,height){
console.log(arguments);//[Arguments] { '0': 'duxin', '1': 18, '2': 168 }
console.log(typeof arguments); //object
console.log(Object.prototype.toString.call(arguments));//[object Arguments]
}
func("duxin",18,168)
类数组转化数组
- 根据扩展运算符来转化类数组
- 使用Array.from()来转化类数组
function func(name, age, height) {
console.log(arguments);//[Arguments] { '0': 'duxin', '1': 18, '2': 168 }
const arr =[...arguments]
console.log(arr); // [ 'duxin', 18, 168 ]
const arr1 = Array.from(arguments);
console.log(arr1);//[ 'duxin', 18, 168 ]
}
func("duxin", 18, 168)
数组扁平化
- 递归
const arr3 = [1,2,[43,5,6,[100,102,104]]];
function flatten(arr){
let result =[];
for (let index = 0; index < arr.length; index++) {
if(Array.isArray(arr[index])){
console.log(arr[index])
result = result.concat(flatten(arr[index]));
} else{
result.push(arr[index])
}
}
return result;
}
console.log(flatten(arr3));//[ 1, 2, 43,5,6, 100, 102, 104 ]
- reduce
function flatten(arr){
return arr.reduce(function(prev,next){
return prev.concat(Array.isArray(next)?flatten(next):next)
},[])
}
console.log(flatten(arr3));//[ 1, 2, 43,5,6, 100, 102, 104 ]
- 扩展运算符
function flatten(arr){
while(arr.some((item)=>Array.isArray(item))){
arr = [].concat(...arr)
}
return arr
}
console.log(flatten(arr3));//[ 1, 2, 43,5,6, 100, 102, 104 ]
- split和toString
function flatten(arr){
return arr.toString().split(",");
}
console.log(flatten(arr3));//[ 1, 2, 43,5,6, 100, 102, 104 ]
ES6的flat
语法:flat(depth),depth是数组展开的深度,也就在我们需要展开多少层的意思。
function flatten(arr) {
return arr.flat(Infinity)
}
console.log(flatten(arr3));//[ 1, 2, 43,5,6, 100, 102, 104 ]
- 正则和JSON
function flatten(arr) {
let str = JSON.stringify(arr);
str = str.replace(/(\[|\])/g,'');
str = '['+str+']';
return JSON.parse(str)
}
console.log(flatten(arr3));//[ 1, 2, 43,5,6, 100, 102, 104 ]