多维数组降维的方法,你会几种?

251 阅读1分钟

(1)数组字符串化

let arr = [[222, 333, 444], [55, 66, 77] ]

arr += '';

arr = arr.split(',');

console.log(arr); // ["222", "333", "444", "55", "66", "77"]

(2)递归

function reduceDimension(arr){

let ret = [];

let toArr = function(arr){

arr.forEach(function(item){

item instanceof Array ? toArr(item) : ret.push(item);

});

}

toArr(arr);

return ret; }

3、Array.prototype.flat()

var arr1 = [1, 2, [3, 4]];

arr1.flat();

// [1, 2, 3, 4]

var arr2 = [1, 2, [3, 4, [5, 6]]];

arr2.flat(); // [1, 2, 3, 4, [5, 6]]

var arr3 = [1, 2, [3, 4, [5, 6]]];

arr3.flat(2);

// [1, 2, 3, 4, 5, 6]

//使用 Infinity 作为深度,展开任意深度的嵌套数组

arr3.flat(Infinity);

// [1, 2, 3, 4, 5, 6]

4、使用 stack 无限反嵌套多层嵌套数组

ar arr1 = [1,2,3,[1,2,3,4, [2,3,4]]];

function flatten(input) {

const stack = [...input];

const res = [];

while (stack.length) {

// 使用 pop 从 stack 中取出并移除值

const next = stack.pop();

if (Array.isArray(next)) {

// 使用 push 送回内层数组中的元素,不会改动原始输入 original input

stack.push(...next);

} else {

res.push(next); }

}

// 使用 reverse 恢复原数组的顺序

return res.reverse();

}

flatten(arr1);// [1, 2, 3, 1, 2, 3, 4, 2, 3, 4]

5、使用 reduce、concat 和递归无限反嵌套多层嵌套的数组

var arr1 = [1,2,3,[1,2,3,4, [2,3,4]]];

function flattenDeep(arr1) {

return arr1.reduce((acc, val) => Array.isArray(val) ? acc.concat(flattenDee

p(val)) : acc.concat(val), []);

}

flattenDeep(arr1);

// [1, 2, 3, 1, 2, 3, 4, 2, 3, 4]