数组扁平化(四种方法)
2023-12-13 09:26:54
数组扁平化:
? ? ? ? 指将多维数组 array(嵌套可以是任何层数,例如:[ 1,[2,3],[4,[5] ] ] )转换为一维数组(例如:[1,2,3,4,5] )。
[ 1,[2,3],[4,[5] ] ]? ------->? [1,2,3,4,5]
方法一:? 递归? ?遍历
? ? ? ? ? ?具体步骤如下代码所示:
<script>
//递归的方法
//封装函数
function flatten(arr,newarr){
//遍历arr数组
for(var i=0;i<arr.length;i++){
//判断arr[i]是否为数组 instanceof 判断是否为数组,返回值为true/false
if(arr[i] instanceof Array){
//如果是数组,则递归,再次运行函数
flatten(arr[i],newarr);
}else{
//若果不是数组,则将arr[i]推到新数组newarr中
newarr.push(arr[i]);
}
}
//返回新数组
return newarr;
}
//给出需要扁平化的数组arr
var arr=[1,[2,3,[4]],[5,6]];
//控制台打印
console.log(flatten(arr,[]));
</script>
或者:(推荐上边的递归方式解决)
function flat(arr1) {
let result = [];
for (let i = 0; i < arr1.length; i++) {
if (Array.isArray(arr1[i])) {
// concat连接两个或更多的数组,不会改变现有的数组,而是返回一个新的数组,不修改原数组
result = result.concat(flat(arr1[i]));
} else {
// push向数组的末尾添加一个或更多元素,并返回新的长度,修改原数组
result.push(arr1[i]);
}
}
return result;
}
var arr1 = [1, [2], [3, 4], [5, [6, [7]]]];
console.log(flat(arr1));
运行结果:
第二种方法: toString()+split()+map()+parseInt()
var arr2 = [1, [2, [3, [4],5,[6,[7]]]]];
arr2=arr2.toString();
arr2=arr2.split(',');
arr2=arr2.map(function(item){
return parseInt(item);
})
console.log(arr2);
运行结果如下:
第三种方法: 正则 replace和JSON方法
var arr3 = [1, [2, [3, [4, 5]]]];
function flatten(arr3) {
var str = JSON.stringify(arr3);
// console.log(str);
str = str.replace(/(\[|\])/g, '');
// console.log(str);
str = '[' + str + ']';
// console.log(str);
return JSON.parse(str);
}
console.log(flatten(arr3));
运行结果如下:
第四种方法:flat(infinity)? ? ?
?flat()创建一个新数组,这个新数组由原数组中的每个元素都调用一次提供的函数后的返回值组成。
Infinity? 无穷大? ?
var arr4=[1, [2, 3, [4]]];
var result1=arr4.flat(Infinity);
console.log(result1);
运行结果如下:
文章来源:https://blog.csdn.net/LxyingINGing/article/details/134875878
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!