Javascript 多为数组扁平化

Javascript 多为数组扁平化

原数组

let arr = [0, [1, [2, 3, [4, [5, 6]], 7]], [8, 9]];

01 循环和递归

function flattenArray(arr) {
    let ans = [];
    for (let i = 0; i < arr.length; ++i) {
        if (Array.isArray(arr[i])) {
            // 写法 01 
            ans.push.apply(ans, flattenArray(arr[i]));
            // 写法 02
            ans = ans.concat(flattenArray(arr[i]));
        } else {
            ans.push(arr[i]);
        }
    }
    return ans;
}

console.log(flattenArray(arr));         // [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

02 reduce 方法

function flattenArray(arr) {
    return arr.reduce((ans, item) => {
        return ans.concat(Array.isArray(item) ? flattenArray(item) : item);
    }, []);
}

console.log(flattenArray(arr));          // [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

03 apply 和 some 方法

function flattenArray(arr) {
    // arr.some 方法返回是否有满足条件(函数标识)的元素
    while (arr.some(item => Array.isArray(item))) {
        arr = [].concat.apply([], arr);
    }
    return arr;
}

console.log(flattenArray(arr));         // [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

04 join 和 split 方法

function flattenArray(arr) {
    // join 方法可返回一个数组元素组成的字符串(默认以 ',' 隔开),无论数组多少维
    // split 方法返回的数组的成员都是字符串
    // map 方法可以对数组的每个元素转换成 Number 类型(方法有多种),返回修改后的新数组
    return arr.join().split(',').map(item => item - 0);
}

console.log(flattenArray(arr));         // [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
posted @ 2020-09-04 03:59  多半是条废龙  阅读(150)  评论(0)    收藏  举报