js多维数组转一维

多维数组转一维数组
1,递归方法
var arr = [1, [2, 3], [3, 2, [1, 6, [3, 5, '3']],'你好',{a:1,b:2}]]
var newArr = []
function fun(array) {
    var len = array.length
    for (var i = 0; i < len; i++) {
        // console.log(typeof array[i])
        if (Array.isArray(array[i])) { // 如若数组元素类型是Array,则递归
            fun(array[i])
        } else {
            newArr.push(array[i]) // 否则添加到newArr数组中
        }
    }

    return newArr
}
console.log(fun(arr))

Array.isArray()方法传递一个参数,如果参数为数组则返回true,反之false

2,使用ES数组方法flat()
var arr = [1, [2, 3], [3, 2, [1, 6, [3, 5, '3']],'你好',{a:1,b:2}]]
var newArr = []

var newArr = arr.flat(Infinity)//Infinity表示展开到最底层,可以指定展开层数
var newArr2 = arr.flat(2) 
console.log(newArr) // [1, 2, 3, 3, 2, 1, 6, 3, 5, "3", "你好", {…}]
console.log(newArr2) //[1, 2, 3, 3, 2, 1, 6, [3, 5, '3'], "你好", {…}]

不知道是不是兼容性问题,好像用这种方法的不太多。

3,使用reduce方法递归转为一维
var arr = [1, [2, 3], [3, 2, [1, 6, [3, 5, '3']], '你好', { a: 1, b: 2 }]]
var fun = (arr) => arr.reduce((prev, curr) => {
    if (Array.isArray(curr)) {
        return prev.concat(...fun(curr));
    }
    return prev.concat(curr);
}, []);

const newArr = fun(arr);

console.log(newArr);

reduce方法:

语法arr.reduce(callback,[valueInitial])
回调函数callback(prev,cur,index,arr),前面两个参数是必选,后面两个是可选
1,previousValue:上一次调用回调返回的值
2,currentValue:数组中当前被处理的元素
3,index:当前元素在数组中的索引
4,array:调用reduce方法的数组
参数二: 首次调用该函数时,作为callback的第一个参数使用,

reduce详解及高级用法可参考这篇博客: https://www.jianshu.com/p/e375ba1cfc47

4,使用lodash里面的flattenDepth方法

安装lodash: npm install --save lodash
引入lodash到指定文件:import * as _ from ‘lodash’
语法:_.flattenDepth(array, [depth=1])
array (Array): 需要减少嵌套层级的数组。
[depth=1] (number):最多减少的嵌套层级数。
(Array): 返回减少嵌套层级后的新数组。

const arr = [1, 2,[3, 4, [5, "ad", ["cd",['12',32,['cc',13]], 5], 9]]];
const newArr = _.flattenDepth(arr,3) //最多减少3层嵌套层级数
const newArr2 = _.flattenDepth(arr,Infinity) //展开所有的嵌套
console.log(newArr) // [ 1, 2, 3, 4, 5, "ad", "cd", [ "12", 32, [ "cc", 13 ] ], 5, 9 ]
console.log(newArr2) // [ 1, 2, 3, 4, 5, "ad", "cd", "12", 32, "cc", 13, 5, 9 ]
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值