在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/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);
    })
} 

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

回答
編輯回答
詆毀你

1

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

2

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

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

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

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

再簡化一點:

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

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

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"]

對這種不明白的東西就先斷點看結果,然后看解釋。很多時候解釋的并不透徹以及每個人的理解都不一樣,重點是知道結果會如何以及如何得到這種結果

2018年1月10日 04:15