實現把多維數組轉為一維數組的幾種方式


在開發過程中遇到一個比較ip大小的情況,並且遇到了把二維數組轉為一維數組的情況,翻下資料,做下總結。

方法一:轉字符串法

該例子中,tempArr是一個多維數組,使用join將其轉為字符串,在使用split方法轉換為一維數組。

缺點: 如果數組中的各個項是number,將不可避免的轉為字符串。

    /** 
     * 使用轉字符串法
     */
    let tempArr = [1,[2,3],[4,5,[6,7]]];
    let result_str1 = tempArr.join(',').split(',');
    console.log(result_str1); //  ["1", "2", "3", "4", "5", "6", "7"]

改進:

使用了map進行再次遍歷。

這種情況只適用於數組中各個項都是number類型或string類型的情況

    // 可以使用循環改進
    function unid(arr){
        let result_str1 = arr.join(',').split(',');
        let result_number = result_str1.map(item=>{
            return Number(item);
        });
        return result_number;
    }
    console.log(unid(tempArr)); // [1, 2, 3, 4, 5, 6, 7]

 

方法二:使用數組的concat方法,以及apply 

 

我們知道concat方法參數如果是一個數組,會把一個一維數組轉為單個的項和前面的數組鏈接起來,如果是多維數組,則保留多維數組里面的項。

看下面這個小例子:

    // 數組的concat方法
  
  let tempArr2 = ['3',4],
  tempArr3 = ['3',4,[5,6]];
  console.log([1,2].concat(tempArr2)); // [1, 2, "3", 4]
  console.log([1,2,].concat(tempArr3)); // [1, 2, "3", 4, [5,6]]

 

所以使用concat方法只能把二維數組轉為一維數組

    let tempArr4 = [[1,2],'3','4',[5,6],[7]];
    console.log([].concat.apply([],tempArr4)); // [1, 2, "3", "4", 5, 6, 7]

 

方法三:使用遞歸

 

可以使用Object.prototype.toString.call()來判斷array的類型,也可以使用Array.isArray來判斷。

    // 方法三:使用遞歸來實現多維數組轉為一維數組
    let result = [],
        tempArr5 = ['1',2,[3,4,[5,6]],7];
    function unid1(arr){
        for(let item of arr){
            if(Object.prototype.toString.call(item).slice(8, -1)==='Array'){
                unid1(item);
            }else{
                result.push(item);
            }
        }
        return result;
    }
    console.log(unid1(tempArr5)); // ["1", 2, 3, 4, 5, 6, 7]

 

 

三種方法有好有壞,還是需要根據實習情況來按需使用。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM