注释很详细,直接上代码
涉及知识点:
- 递归
- flat
- 字符串操作
- 正则表达式替换
题干:
我的答案
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
</head>
<body>
<script>
/**
* 这题方法确实很多,每种类似咱都举例一种昂,
* 其他各种组合也都是改变些许,就不多说了
*/
let arr = [
[0, 1],
[2, [3, [4, [5, 6]]]],
];
/**
* 使用递归实现
* 当遇到非数组时直接放进数组返回,
* 遇到数组就递归调用自身,并将返回值拼接起来
*/
const _flatten = (arr) => {
// 补全代码
let result = [];
arr.forEach((element) => {
if (Array.isArray(element)) result = result.concat(_flatten(element));
else result.push(element);
});
return result;
};
console.log(_flatten(arr));
/**
* 使用flat()实现(开发首选)
* 当然在牛客好像不支持,交题别用这个
*/
const _flatten1 = (arr) => arr.flat(Infinity);
console.log(_flatten1(arr));
/**
* 扩展运算符实现
* 用扩展运算符的小友可能会有误区,
* 直接使用其实只会扩展第一层的数组,
* 所以需要使用while循环,
* 每次循环都会将数组中的数组展开再拼接赋值,
* 直到数组中没有对象为数组为止
*/
const _flatten2 = (arr) => {
let newArr = JSON.parse(JSON.stringify(arr));
while (newArr.some((item) => Array.isArray(item)))
newArr = [].concat(...newArr);
return newArr;
};
console.log(_flatten2(arr));
/**
* 字符串操作函数实现
* toString将数组变成"0,1,2"的形式,
* 分割再组成数组即可
*/
const _flatten3 = (arr) => arr.toString().split(",").map(Number);
console.log(_flatten3(arr));
/**
* 使用正则表达式替换实现
* 一开始我们肯定需要转字符串,但用的是JSON.stringify,
* 将数组变成"[0,1,2]"的形式,
* 使用将`[`或者`]`正则表达式进行全局替换为空值,
* 然后再分割再组成数组即可
*/
const _flatten4 = (arr) =>
JSON.stringify(arr)
.replace(/[\[|\]]/g, "")
.split(",")
.map(Number);
console.log( JSON.stringify(arr)
.replace(/[\[|\]]/g, ""));
console.log(_flatten4(arr));
</script>
</body>
</html>
博客更新不是很及时,需要看后面内容的可以看看我的
gitee仓库
牛客JS题Gitee仓库