什么是数组扁平化

什么是数组扁平化?数组扁平化就将一个多层嵌套的数组变成一个单层数组,如:[1, [2, [3, [4, [5]]]]]---->[1,2,3,4,5]
数组扁平化作为前端面试的一个经典面试题,今日我就和咱们来聊聊结束面试技巧数组扁平化的N种方式。

结束的7种方式

1. arr.flat(Infinity)

flat作为ES6的新特性,只需调用该办法便可以简略快速结束数组的扁平化,运用起json格局怎么翻开来确实很容易上手(数组可以说是0门槛),可是只会这个办法是没有办法得到面试官的喜爱的!

const arr = [1, [2, [3, [4, [5]]]]];
// 1. flat自动翻开
let arr1 = arr.flat(Infinity);
console.log(arr数组的界说1); // [ 1, 2, 3, 4, 5 ]

2. r数组函数的使用办法eplace + split

思维:将数组先转变为字符串,再运用正则去除悉数的中括号,毕竟将剩下的字符串以逗号为分隔符生成字符串。

可是这种办法存在一个缺陷,生成出来的数组每一项都是字符串,而非原本的数字前端学什么

const arr = [1, [2, [3, [4, [5]前端]]]];
//前端培训组织 将arr变成字符串
let str = JSON.stringify(arr);
console.log(str); // [1,[2数组,[3,[4,[5]]]]] String
// 2. replace + split
// 运用正则去除str里边的[]两个符号
let arr2 = str.replace(/([|])/g, '');
console.log(arr2); // 1,2,3,4,5
// 以,为间隔生成数组
arr2 = arr2.split(',');
console.log(数组公式a数组的界说rr2); //前端和后端哪个薪酬高[ '1', '2', '3'前端和后端哪个薪酬高, '4', '5' ]
// 整组成一行代码如下
let arr3 =面试毛遂自荐一分钟 strjson文件是干什么的.replace(/([|])/g, '').split(',');
console.log(arr3);// [ '1', '2', '3', '4', '5' ]

3. replace + JSON面试常见问题及答复技巧.parse

思维:相同先转化成字符串,去除悉数的中括号,但毕竟在两个运用中括号包围起来,再调用JSON.parse办法主数组初始化动转化为数组

此办法对上一个办法进行了一点改善,处理了生成的数组都是字符的问题

const arr = [1, [2, [3, [4, [面试常见问题及答复技巧5]]]]];
// 将json格局怎么翻开arr变成字符串
let str = JSON.stjson文件是干什么的ringify(arr);
console.log(str); // [1,[2,数组去重[3,[4,[5]]面试问题大全及答案大全]]] String
// 3. replace + JSON.parse
// 先去除悉数的括号
let str2 = str.replace(/([|])/g, '');
// 再加上左右括号
str2 = '[' + str2 + ']';
str2 = JSON.parse数组去重(str2); // 实在含义数组和链表的区别上结束的数组扁平化
console.log(str2);  // [ 1, 2, 3, 4, 5 ]  A面试毛遂自荐一分钟rray前端学什么

4. map思维

map思维是将数组中悉数字符取出来,再次生成数组一同将悉数字符转变为数字类型,也算是对上面试问题大全及答案大全面第二个办法的一种优化。

const arr = [1, [2, [3, [4, [5]]]]jsonp];
function flatten(arr) {
return a前端和后端哪个薪酬高rr.toString().split(',').map(function (item) {
return +item //+可以快速获得Number类型
})
}
console.l面试og(flatten(arr));  // [ 1, 2, 3,json格局怎么翻开 4, 5 ]

5. 扩展运算符(…)

此办法json借用了数组中的Array.isArray和som数组去重e办法,运用while循环来不断对数组判别里边是否有数组,存在就运用…将其翻开,也算是一种比较方便的办法。

const arr = [1, [2, [3, [4, [5]]]]];
function Flatten(array) {
// 运用Array.isArray判别数组中是否有数组嵌套
// 运用some办法进行控制while循环
while (array.some((item) =数组初始化> Array.isArray(item))) {
// 将数组翻开后再次掩盖
array = [].concat(...array)
}
return array;
}
console.lo数组初始化g前端开发需要学什么(Flatten(arr));//[ 1, 2, 3, 4, 5 ]

6. 递归函数

递归函数相同用到了Array.isArray办法,假如发现数组中存在数组嵌套就递归调用进行翻开。

const arr = [1数组c言语, [2, [3, [4, [5]]]]];
function fn(arr数组词ay) {
let a = [];
for (let i = 0; i < array.length; i++){
// 存在数组就进行递JSON归调用
if (Array.isArray(array[i])) {
a = a.concat(fn(array[i]));
} else { // 不存在直接push
a.push(array[i]);
}
}
return a;
}
console.log(fn(arr)); //[1,2,3,4,5]

7. re前端面试题duce思维

reduce思维是传递一个空数组作为接纳政策,一同也运用了递归思维,将数组运用递归进行翻开,毕竟回来一维数组。

const arr = [1, [2, [3, [4, [5]]]]];
function Flatten(arr面试问题ay) {
return ajson是什么意思rray数组和链表的区别.reduce((pre, cur) => {
// 判别是否存在数组,存在就递归,不存在直接push
return前端面试题 pre.concat(Arr面试技巧和注意事项ay.isArray(cur)?Flatten(cur):cur)
},[]) //传递空数组作为接纳政策
}
c前端开发onsole.log(Flatten(arr));[1, 2,json怎么读 3,面试常见问题及答复技巧 4, 5数组词]

写在终面试毛遂自荐

数组扁平化可以说是相对简略的一个办法,办法也是多种多样,在这也仅仅罗列了一下我熟jsonp悉的几种办法。有更好的办法也欢迎各位大牛在议论区点拨。

我是江河,前端实习生一枚,欢迎各位大佬滴滴,文章如有不正之处敬请纠正!