前端面试题 - 数组扁平化方法总结
数组扁平化
1. Array.prototype.flat(depth)
方法
2. 转换成字符串
2.1 toString
+ map
+ parseInt
var arr = [[1, 2, 3], [4, 5, 6, 7], [8, 9, 10, 11, [12, 13, [14, 15, 16]]], 17],
str = arr.toString(), // '1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17'
strArr = str.split(','), // ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12', '13', '14', '15', '16', '17']
res = strArr.map(item => parseInt(item)) // [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17]
2.2
toString
+ JSON.parse
var arr = [[1, 2, 3], [4, 5, 6, 7], [8, 9, 10, 11, [12, 13, [14, 15, 16]]], 17],
str = arr.toString(), // '1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17'
jsonStr = '[' + str + ']', // '[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17]'
res = JSON.parse(jsonStr) // [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17]
3. 递归
function flat(array) {
/* 递归 */
var _res = [],
dfs = function (arr) {
for (let i = 0;
i < arr.length;
i++) {
Object.prototype.toString.call(arr[i]) === '[object Array]'
? dfs(arr[i])
: _res.push(arr[i])
}
}dfs(array)return _res
}
4. 迭代
function flat(array) {
/* 迭代 */
var queue = [array],
res = [],
nextwhile (queue.length) {
next = queue.shift()Object.prototype.toString.call(next) === '[object Array]'
? Array.prototype.push.apply(queue, next)
: res.push(next)
}return res
}