数组的降维,多维数组变成一维, 把数组拉平

数组的降维,实际业务中使用的不多,但是面试时候可能会遇到。

使用 ES5 语法实现给数组降维

const array1 = [1, [2, [3, [4, 5], 6,], 7], 8];

使用函数降维:

const array2 = [];
const dimensionReduction = (arg) => {
    arg.forEach((item) => {
        Array.isArray(item) ? dimensionReduction(item) : array2.push(item);
    });
}
dimensionReduction(array1);
console.log(array2) // [1,  2, 3, 4, 5, 6, 7, 8]

使用函数回调的方法完成给数组降维, 缺点: 不能给函数特定的降维,只能从多维降维成一维数组

使用 ES6 API (flat())

一、flat() 方法使用简单介绍

// 不传参 flat() 
const array3 = array1.flat();
console.log(array3);  // [1, 2, [ 3, [ 4, 5 ], 6 ], 7, 8] 
// 如果不传参 则是从外到里 降一维

// flat(0)
const array4 = array1.flat(0);
console.log(array4);  // [1, [2, [3, [4, 5], 6,], 7], 8]
// 传参为 0 数组没有变化

// flat(1) 
const array3 = array1.flat(1);
console.log(array3);  // [1, 2, [ 3, [ 4, 5 ], 6 ], 7, 8] 
// 传参为 1 则是从外到里 降一维, 和不传参一样

// flat(2)
const array4 = array1.flat(2);
console.log(array4); // [1, 2, 3, [4, 5], 6, 7, 8]

// flat(0)
const array5 = array1.flat(-1);
console.log(array5);  // [1, [2, [3, [4, 5], 6,], 7], 8]
// 传参为 0 数组没有变化

/**
 * 总结:
 * 传入一个整数, 数组降指定的维度
 */

总结:flat(n) 传入一个正整数n, 数组降指定的维度;不传参数,降一维; 其他不合法参数,都会得到原始数组

那么问题来了,如果一个数组,我们不知道它是几维数组,该怎么办呢

方法一: flat(n) n写很大

const array6 = array1.flat(1000);
console.log(array6); // [1, 2, 3, 4, 5, 6, 7, 8]
// 显然,这种写法不够优雅

方法二:flat(Infinity) (Infinity: 正无穷)

const array7 = array1.flat(Infinity);
console.log(array7); // [1, 2, 3, 4, 5, 6, 7, 8]
// 显然,这种写法非常优雅

你可能感兴趣的:(数组的降维,多维数组变成一维, 把数组拉平)