JS拉平數組

JS拉平數組

有時候會遇到一個數組裏邊有多個數組的狀況(多維數組),而後你想把它拉平使其成爲一個一維數組,其實最簡單的一個方法就是ES6數組方法Array.prototype.flat。使用方法以下:數組

const lists = [1, [2, 3, [4, 5]]];
lists.flat(); // [1, 2, 3, [4, 5]],默認只拉平一層,若是想要所有拉平,參數換爲Infinity便可

但是實際有些狀況下,須要去兼容低版本的問題處理,因此就本身寫了兩種解決方案,根據本身喜歡使用,不過沒支持Infinity這個處理方式,僅是做爲自定義拉平數組。prototype

1.遞歸code

const lists = [1, [2, 3, [4, 5]]];
function reduceArr(list, depth) {
    if(depth === 0) return list;
    let result = [];
    for(let i = 0;i < list.length;i++) {
        if(Array.isArray(list[i])) {
            result = result.concat(list[i]);
        } else {
            result.push(list[i]);
        }
    }
    return reduceArr(result, --depth);
}
console.log(reduceArr(lists, 2));

2.循環處理遞歸

const lists = [1, [2, 3, [4, 5]]];
function reduceArr(list, depth) {
    let result = [];
    for(let i = 1;i <= depth;i++) {
        result.length && (list = result);
        result = [];
        for(let j = 0;j < list.length;j++) {
            if(Array.isArray(list[j])) {
                result = result.concat(list[j]);
            } else {
                result.push(list[j]);
            }
        }
    }
    if(depth) {
        return result;
    } else {
        return list;
    }
}
console.log(reduceArr(lists, 2));
相關文章
相關標籤/搜索