一、判断数组的几种方法:
1.1 instanceof 运算符
let arr = [1,2,3];
console.log(arr instanceof Array); //true
1.2 isArray
let arr = [1,2,3];
console.log(Array.isArray(arr)); //true
1.3 Array原型链上的isPrototypeOf
let arr = [1,2,3];
console.log(Array.prototype.isPrototypeOf(arr)); //true
1.4 Object.prototype.toString.call()
let arr = [1,2,3];
console.log(Object.prototype.toString.call(arr) == '[object Array]'); //true
1.5 Object.getPrototypeOf()
let arr = [1,2,3];
console.log(Object.getPrototypeOf(arr) == Array.prototype); //true
Object方法合集Api: Object - JavaScript | MDN
1.6 constructor 构造函数
let arr = [1,2,3];
console.log(arr.constructor == Array); //true
二、数组的扁平化处理
数组扁平化是指将一个多维数组变为一维数组
2.1 ES6的扩展运算符+concat
let arr = [1,[2,[3,[4]]]];
const dealArr = (arr:any) => {
while(arr.some((item: any) => Array.isArray(item))) {
arr = [].concat(...arr);
}
return arr;
}
console.log(dealArr(arr)) // [1,2,3,4]
2.2 使用reduce函数
reduce
函数的参数是previou(上一个)和current(当前)
let arr = [1,[2,[3,[4]]]];
const dealArr = (arr: any) => {
return arr.reduce((prev: Array<number>, cur: Array<number>) => {
return prev.concat(Array.isArray(cur) ? dealArr(cur) : cur);
}, []); //prev的初始值是空数组
};
console.log(dealArr(arr)) // [1,2,3,4]
2.3 split 和 toString
let arr = [1,[2,[3,[4]]]];
const dealArr = (arr: any) => {
return arr.toString().split(",").map((val:any)=> {
return parseInt(val);
})
};
console.log(dealArr(arr)) // [1,2,3,4]
2.4 ES6 中的 flat
flat()
方法会按照一个可指定的深度递归遍历数组,并将所有元素与遍历到的子数组中的元素合并为一个新数组返回。
语法:
let newArray = arr.flat([depth])
参数:depth 可选,指定要提取嵌套数组的结构深度,默认值为 1。使用 Infinity,可展开任意深度的嵌套数组。
let arr = [1,[2,[3,[4]]]];
console.log('arr1', arr.flat()); // [1,2,[3,[4]]]
console.log('arr1', arr.flat(2)); // [1,2,3,[4]]
console.log('arr1', arr.flat(Infinity)); // [1,2,3,4]
2.5 递归实现
let arr = [1,[2,[3,[4]]]];
const dealArr = (arr: any) => {
let newArr: Array<number> = [];
arr.forEach((item: any) => {
if (Array.isArray(item)) {
newArr = newArr.concat(dealArr(item));
} else {
newArr.push(item);
}
});
return newArr;
};
console.log('895', dealArr(arr));
三、数组的方法总结:
w3school:JavaScript 数组参考手册