文章目录
- 1 实现数组的扁平化
- 1.1 递归
- 1.2 reduce
- 1.3 扩展运算符
- 1.4 split和toString
- 1.5 flat
- 1.6 正则表达式和JSON
1 实现数组的扁平化
1.1 递归
通过循环递归的方式,遍历数组的每一项,如果该项还是一个数组,那么就继续递归遍历,实现数组的每一项的连接。
javascript">let arr = [1, [2, [3, 4, 5]]];function flatten(arr) {let result = [];for (let i = 0; i < arr.length; i++) {if (Array.isArray(arr[i])) {result = result.concat(flatten(arr[i]));} else {result.push(arr[i]);}}return result;
}
flatten(arr);
1.2 reduce
简化第1种方法的代码,用reduce()
来实现数组的拼接。
javascript">function flatten(arr) {return arr.reduce(function(prev, next) {return prev.concat(Array.isArray(next) ? flatten(next) : next);}, []);
}
1.3 扩展运算符
扩展运算符和some()
的方法共同使用,逐层展开数组。
javascript">function flatten(arr) {while (arr.some(item => Array.isArray(item))) {arr = [].concat(...arr);}return arr;
}
1.4 split和toString
先用toString()
将数组转换成用逗号分隔的字符串,然后再用split()
方法把字符串重新转换为数组。
javascript">function flatten(arr) {return arr.toString().split(',');
}
1.5 flat
ES6中flat方法的语法:arr.flat([depth])
其中depth是可以传递数组的展开深度,默认是1,即展开1层数组。
如果层数不确定,参数可以传进Infinity,代表不论多少层都要展开。
javascript">function flatten(arr) {return arr.flat(Infinity);
}
1.6 正则表达式和JSON
先用JSON.stringify()
的方法将数组转换为字符串,然后通过正则表达式过滤掉字符串中的数组的方括号,最后再利用JSON.parse()
把它转换成数组。
javascript">function flatten(arr) {let str = JSON.stringify(arr);str = str.replace(/(\[|\])/g, '');str = '[' + str + ']';return JSON.parse(str);
}