1. 程式人生 > >js中多維數組轉一維

js中多維數組轉一維

concat span dimens else pre arr for ray ole

  法一:使用數組map()方法,對數組中的每一項運行給定函數,返回每次函數調用的結果組成的數組。

let arr = [1,[2,[[3,4],5],6]];
function oneDimensionalArray (arr) {
        let arr1 = (arr + ‘‘).split(,); // 將數組轉字符串後再以逗號分隔轉為數組
        let arr2 = arr1.map(function(x){
            return Number(x);
        });
        return arr2;
}
console.log(oneDimensionalArray(arr));

  法二:使用apply結合concat,缺點是只能將二維轉一維,多維數組就不對了。

let arr = [1,[2,3],[4,5]];
console.log([].concat.apply([],arr));

  法三:將數組轉為字符串再轉為數組,缺點是數組中每項成字符串了

let arr = [1,[2,[[3,4],5],6]];
let arr2 = arr.join(‘,‘).split(‘,‘);
console.log(arr2);//["1", "2", "3", "4", "5", "6"]

//或
let c=[1,3,4,5,[6,[0,1,5],9],[2,5,[1,5]],[5]];
console.log(c.toString().split(‘,‘))

  法四:遞歸

let arr = [1, [2, [[3, 4], 5], 6]];
let newArr = [];

function oneDimensionalArray(arr) {
    for (let i = 0; i < arr.length; i++) {
        if (Array.isArray(arr[i])) {
            oneDimensionalArray(arr[i]);
        } else {
            newArr.push(arr[i]);
        }
    }
}
oneDimensionalArray(arr);
console.log(newArr); 
//[1, 2, 3, 4, 5, 6]

  法五:reduce+遞歸

    use strict‘;
    let arr = [1,[2,[[3,4],5],6]];
    const flatten = arr => arr.reduce(
            (acc,val) => acc.concat(Array.isArray(val)? flatten(val):val),[]
    )
    console.log(flatten(arr));//[1, 2, 3, 4, 5, 6]

js中多維數組轉一維