zoukankan      html  css  js  c++  java
  • 数组扁平化的方法

    数组扁平化就是把多维数组转为一维数组

    递归

    1.for循环
    遍历数组的每一项,如果不是数组,直接push,如果是数组,继续递归处理

    const arr = [1,[2,3],[4,[5,6]]]
    function flatten(arr){
        const res = []
        for(let i = 0; i < arr.length; i++){
            if(Array.isArray(arr[i])){
                res.push(...flatten(arr[i]))
                //res = res.concat(flatten(arr[i]))
            }else{
                res.push(arr[i])
            }
        }
        return res
    }
    flatten(arr)
    

    2.reduce

    const arr = [1,[2,3],[4,[5,6]]]
    function flatten(arr){
        return arr.reduce((res,cur)=>{
            return res.concat(Array.isArray(cur)?flatten(cur):cur)
        },[])
    }
    flatten(arr)
    

    ...运算符

    ...运算符可以将二维数组变为一维数组,做一个遍历,若arr中含有数组则使用一次扩展运算符,直至没有为止。

    const arr = [1,[2,3],[4,[5,6]]]
    function flatten(arr){
        while(arr.some(item => Array.isArray(item))){
            arr = [].concat(...arr)
        }
        return arr
    }
    flatten(arr)
    

    toString()/join() + split()

    如果数组每项都是数字,则可以先将数组转为字符串,再使用split()转为数组

    const arr = [1,[2,3],[4,[5,6]]]
    function flatten(arr){
        return arr.toString().split(',').map(item => item * 1)
    }
    flatten(arr)
    
  • 相关阅读:
    JS练习
    推断一组数的规律,并填充缺失的数
    IP地址的正则表达式写法
    相比于HTML4,HTML5废弃的元素有哪些?
    关于HTML5和CSS3的几个“新增”
    hdu 3092 简单数论+分组背包dp
    避障
    人工势场法
    A*
    pop 2049-简单bfs
  • 原文地址:https://www.cnblogs.com/zhahuhu/p/14491605.html
Copyright © 2011-2022 走看看