数组的降维,实际业务中使用的不多,但是面试时候可能会遇到。
使用 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]
// 显然,这种写法非常优雅