--《JavaScript那些事》--数组扁平化的几种实现方法--

数组扁平化

解决数组扁平化问题时,应该先找准扁平化的关键点在哪?

关键点在于解决多余的'[]', 因此有以下解决方式:

  1. 使用toString() + split()解决纯字符串的数组
    let a = [18, 'sada', 28];
    let array = ['aaaa', 'bbbb', 'cccc'];
    let array2 = [1, 2, 3];
    Array.prototype.push.call(array2, a);
    Array.prototype.push.call(array2, array);
    console.log(array2.toString().split(',')); //['1','2','3','18','sada', '28','aaaa', 'bbbb', 'cccc']

该方法会将数组中的内容转为字符串,对于单一数据类型数组使用该方法更合适

  1. 递归 + concat + isArray
    function handleArray (arr1) {
    if (! arr1 instanceof Array) {
        return []
    }
    let arr = [];
    for (let i in arr1) {
        if (Array.isArray(arr1[i])) {
            arr = arr.concat(handleArray(arr1[i]));
        } else {
            arr.push(arr1[i]);
        }
    }
    return arr;
    }

    array2 = handleArray(array2)
    console.log(array2) //[1,2,3,18,'sada',28,'aaaa','bbbb','cccc']
  1. flat方法
    let array3 = array2.flat();
    console.log(array3); //[1,2,3,18,'sada',28,'aaaa','bbbb','cccc']
  1. 正则表达式
    let array4 = array2.toString().replace('/\[|\]/g', '').split(',');
    console.log(array4);//['1','2','3','18','sada', '28','aaaa', 'bbbb', 'cccc']
posted @ 2021-02-26 18:03  小虾米在code江湖  阅读(65)  评论(0编辑  收藏  举报