--《JavaScript那些事》--数组扁平化的几种实现方法--
数组扁平化
解决数组扁平化问题时,应该先找准扁平化的关键点在哪?
关键点在于解决多余的'[]', 因此有以下解决方式:
- 使用toString() + split()解决纯字符串的数组
let a = [18, 'sada', 28];
let array = ['aaaa', 'bbbb', 'cccc'];
let array2 = [1, 2, 3];
Array.prototype.push.call(array2, a);
Array.prototype.push.call(array2, array);
console.log(array2.toString().split(',')); //['1','2','3','18','sada', '28','aaaa', 'bbbb', 'cccc']
该方法会将数组中的内容转为字符串,对于单一数据类型数组使用该方法更合适
- 递归 + concat + isArray
function handleArray (arr1) {
if (! arr1 instanceof Array) {
return []
}
let arr = [];
for (let i in arr1) {
if (Array.isArray(arr1[i])) {
arr = arr.concat(handleArray(arr1[i]));
} else {
arr.push(arr1[i]);
}
}
return arr;
}
array2 = handleArray(array2)
console.log(array2) //[1,2,3,18,'sada',28,'aaaa','bbbb','cccc']
- flat方法
let array3 = array2.flat();
console.log(array3); //[1,2,3,18,'sada',28,'aaaa','bbbb','cccc']
- 正则表达式
let array4 = array2.toString().replace('/\[|\]/g', '').split(',');
console.log(array4);//['1','2','3','18','sada', '28','aaaa', 'bbbb', 'cccc']
离大侠再近一步!