js将多维数组变成一维数组

一.js多维数组转换成一维数组
 //1.递归:注意这个不兼容IE

 function arrReduce(someArr){
    for(let i = 0;i< someArr.length;i++ ){
        if(Array.isArray(someArr[i])){
            arrReduce(someArr[i]);
        }else{
            arrMax.push(someArr[i]);
        }
    } 
 }
let content = [1,2,3,4,5,[6,7,[8,9,10,[11,12,13]]]];
let arrMax = [];//存放转换数组元素
arrReduce(content);
console.log(arrMax);

----------------------------------------------------------------------------------------------------------------------------------------------------------
//2.reduce方法

let arr1 = [1,[2,[[3,4],5],6,7,[8,9,[10,11,[12,13]]]]];
const flatten1 = arr1 => arr1.reduce((acc,val) => acc.concat(Array.isArray(val)? flatten1(val):val),[],)
console.log(flatten1(arr1));

//3.数组的join()

let arr1 = [1,[2,[[3,4],5],6,7,[8,9,[10,11,[12,13]]]]], newArray = new Array();
//输入的一维数组全是number类型
for(let item of arr1.join().split(",")){
     newArray.push(Number(item));
}
console.log(newArray);

//4.toString

let arrPol = [1,[2,[[3,4],5],6,7,[8,9,[10,11,[12,13]]]]], newArray = new Array();
for(let item of arrPol.toString().split(',')){
     newArray.push(Number(item));
}
console.log(newArray);

//5.空字符串''

let arrKol = [1,[2,[[3,4],5],6,7,[8,9,[10,11,[12,13]]]]];
let newArr = [];
for(let item of (arrKol + '').split(',')){
     newArr.push(Number(item));
}
console.log(newArr);

//6.ES6的flat(n): n非必填项,n默认是1,表示扁平化深度.

//默认转化成一维
console.log([1,[2,[[3,4],5],6,7,[8,9,[10,11,[12,13]]]]].flat()); // [1,2,3,3,4,5,6,7,8,9,10,11,12,13]
 
// 指定转换的嵌套层数
console.log([1,[2,[[3,4],5],6,7,[8,9,[10,11,[12,13]]]]].flat(2)); //[1, 2, Array(2), 5, 6, 7, 8, 9, Array(3)]
 
// 不管嵌套多少层
console.log([1,[2,[[3,4],5],6,7,[8,9,[10,11,[12,13]]]]].flat(Infinity)); // [1,2,3,3,4,5,6,7,8,9,10,11,12,13]
 
// 自动跳过空位
console.log([1, [2, , 3, ,4]].flat()); // [1, 2, 3, 4]

总结:

       这些都是综合比较得来的,实现办法太多了,还有map(),reduce()+递归,es6新增的扩展运算符,flatMap()...前端本身就是一个在寻求更加完美的解决过程,而不是满足于某一种方式实现,我们追求近乎完美的过程中提升自我,寻找平衡。

参考来源:

1.多维数组变成一维数组

2.javascript多维数组转一维数组

3.js将多维数组转换为一维数组

  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

尔嵘

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值