实现数组的扁平化

发布于:2025-02-10 ⋅ 阅读:(71) ⋅ 点赞:(0)

1 实现数组的扁平化

1.1 递归

通过循环递归的方式,遍历数组的每一项,如果该项还是一个数组,那么就继续递归遍历,实现数组的每一项的连接。

let arr = [1, [2, [3, 4, 5]]];

function flatten(arr) {
    let result = [];
    for (let i = 0; i < arr.length; i++) {
        if (Array.isArray(arr[i])) {
            result = result.concat(flatten(arr[i]));
        } else {
            result.push(arr[i]);
        }
    }
    return result;
}
flatten(arr);

1.2 reduce

简化第1种方法的代码,用reduce()来实现数组的拼接。

function flatten(arr) {
    return arr.reduce(function(prev, next) {
        return prev.concat(Array.isArray(next) ? flatten(next) : next);
    }, []);
}

1.3 扩展运算符

扩展运算符和some()的方法共同使用,逐层展开数组。

function flatten(arr) {
    while (arr.some(item => Array.isArray(item))) {
        arr = [].concat(...arr);
    }
    return arr;
}

1.4 split和toString

先用toString()将数组转换成用逗号分隔的字符串,然后再用split()方法把字符串重新转换为数组。

function flatten(arr) {
    return arr.toString().split(',');
}

1.5 flat

ES6中flat方法的语法:arr.flat([depth])

其中depth是可以传递数组的展开深度,默认是1,即展开1层数组。

如果层数不确定,参数可以传进Infinity,代表不论多少层都要展开。

function flatten(arr) {
    return arr.flat(Infinity);
}

1.6 正则表达式和JSON

先用JSON.stringify()的方法将数组转换为字符串,然后通过正则表达式过滤掉字符串中的数组的方括号,最后再利用JSON.parse()把它转换成数组。

function flatten(arr) {
    let str = JSON.stringify(arr);
    str = str.replace(/(\[|\])/g, '');
    str = '[' + str + ']';
    return JSON.parse(str);
}

网站公告

今日签到

点亮在社区的每一天
去签到