鍍金池/ 問答/HTML/ 使用javascript 扁平化數(shù)組---5種方法

使用javascript 扁平化數(shù)組---5種方法

使用遞歸: map、reduce
function flatten(arr) {
    var res = [];
    arr.map(item => {
        res = Array.isArray(item) ? res.concat(flatten(item)) : res.push(item);
    });
    return res;
}
function flatten(arr) {  
    return arr.reduce((result, item)=> {
        return result.concat(Array.isArray(item) ? flatten(item) : item);
    }, []);
}
循環(huán),一層一層剝開
function flatten(arr) {
    while(arr.some(item=>Array.isArray(item))) {
        arr = [].concat(...arr);
    }
    return arr;
}
黑科技:join、toString
function flatten(arr) {
    return arr.join(',').split(',').map(function(item) {
        return parseInt(item);
    })
}
function flatten(arr) {
    return arr.toString().split(',').map(function(item) {
        return Number(item);
    })
} 

上邊這兩個(gè)代碼塊表示自己也看不懂,大佬能幫忙解釋一下嗎?

回答
編輯回答
詆毀你

1

join用來講數(shù)組元素按照某個(gè)字符來進(jìn)行拼接成一個(gè)字符串。
數(shù)組的所有元素都會(huì)被轉(zhuǎn)換為string類型。 也就相當(dāng)于對所有的item進(jìn)行調(diào)用toString
最后在進(jìn)行split,將字符串按照某字符進(jìn)行分割,得到數(shù)組。

2

2可以認(rèn)為是1實(shí)現(xiàn)方案中的一部分

toString,就是將整個(gè)數(shù)組轉(zhuǎn)換為字符串進(jìn)行輸出,所有的item都會(huì)被轉(zhuǎn)換為字符串,可以簡單的理解為一個(gè)遞歸的過程。
最后進(jìn)行split

P.S. 只是大概的思路,不保證ECMAScript文檔中定義的流程就是這樣的

2017年6月13日 07:55
編輯回答
悶油瓶

再簡化一點(diǎn):

function flatten(arr) {
    return arr.join(',').split(',').map(Number);
}
2017年7月27日 16:43
編輯回答
淺時(shí)光

官方解釋:join() 把數(shù)組的所有元素放入一個(gè)字符串。元素通過指定的分隔符進(jìn)行分隔,默認(rèn)使用','

let arr = [1,2,3,[34,12],[12,[34,[56,78]]]];
arr.join()
// "1,2,3,34,12,12,34,56,78"
arr.join(',')
// "1,2,3,34,12,12,34,56,78"
arr.toString()
// "1,2,3,34,12,12,34,56,78"

//split之后
arr.join(',').split(',')
// ["1", "2", "3", "34", "12", "12", "34", "56", "78"]

對這種不明白的東西就先斷點(diǎn)看結(jié)果,然后看解釋。很多時(shí)候解釋的并不透徹以及每個(gè)人的理解都不一樣,重點(diǎn)是知道結(jié)果會(huì)如何以及如何得到這種結(jié)果

2018年1月10日 04:15