扁平化是指将数据组织为一维数组或对象的过程。
['a','b','c'] //这是一个拥有3个元素的数组,是一个一维数组(不存在数组嵌套)。
[['a','b','c'],['d','e','f']] //这是一个拥有2个元素的数组,是一个二维数组(存在数组嵌套)。
// 其他维度的数组以此类推。
那么数组扁平化就是将多维数组转换为一维数组的过程。
let a = [1, [2, [3, 4]]];
a.flat(); // [1, 2, [3, 4]]
a.flat(2); // [1, 2, 3, 4]
// 直接使用 infinity 作为参数,可以将任意维度的数组扁平化为一维数组。
a.flat(Infinity); // [1, 2, 3, 4]
是JS中的一个特殊值,表示无穷大,可以用来表示任意大的数值。
let a = [1, [2, [3, 4]]];
function flatten(arr) {
let result = [];
for (let i = 0; i < arr.length; i++) {
if (Array.isArray(arr[i])) {
result = result.concat(flatten(arr[i]));
} else {
result.push(arr[i]);
}
}
return result;
}
flatten(a); // [1, 2, 3, 4]
let a = [1, [2, [3, 4]]];
function flatten(arr) {
let result = [];
while (arr.length) {
let item = arr.shift();
if (Array.isArray(item)) {
arr = item.concat(arr);
} else {
result.push(item);
}
}
return result;
}
flatten(a); // [1, 2, 3, 4]
let a = [1, [2, [3, 4]]];
function flatten(arr) {
return arr.reduce((result, item) => {
return result.concat(Array.isArray(item) ? flatten(item) : item);
}, []);
}
flatten(a); // [1, 2, 3, 4]
let a = [1, [2, [3, 4]]];
a.toString().split(',').map(item => +item); // [1, 2, 3, 4]
let a = [1, [2, [3, 4]]];
a.join().split(',').map(item => +item); // [1, 2, 3, 4]
let a = [1, [2, [3, 4]]];
JSON.parse('[' + JSON.stringify(a).replace(/\[|\]/g, '') + ']'); // [1, 2, 3, 4]
let a = [1, [2, [3, 4]]];
while (a.some(Array.isArray)) {
a = [].concat(...a);
}
a; // [1, 2, 3, 4]