一、多维数组降级
效果
代码
/**
* 多维数组降维
*/
/**
* 方式1:flat方法
* flat里面的参数是降维的维度,默认是1,如果不写则三维数组会
* 被降维成[1,2,3,4,5,6[7,8,9]],n维数组可以通过 n维数组.flat(n-1)
* 降维成一维数组
*/
const data = [1, 2, 3, [4, 5, 6, [7, 8, 9]], 10, 11]
console.log('flat', data.flat(2))
/**
* 方式2:for循环
*/
function mFlat (arr) {
for (let i = 0; i < arr.length; i++) {
// 是数组就
if (arr[i] instanceof Array) {
/**
* 下面的就是这样的
* arr = [1,2,3].concat([4, 5, 6, [7, 8, 9]], [10,11])
* arr = [1,2,3,4,5,6,[7,8,9],10,11]
* 下次判断符合条件就会就会执行
* arr = [1,2,3,4,5,6].concat([7,8,9],[10,11]) = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
* 这样就降级为一维数组了
* 个人觉得方式一和方式二两种方式降维多维数组是比较简单的
*/
arr = arr.slice(0, i).concat(arr[i], arr.slice(i + 1))
}
}
return arr
}
console.log('mFlat', mFlat(data))
二、嵌套对象降维
效果
代码
/**
* 路由多级嵌套数组处理成一维数组
* @param arr 嵌套对象数组
* @returns 返回处理后的一维对象数组
*/
const arr = [
{
label: '1',
value: 1,
children: [
{
label: '2',
value: 2,
children: [{ label: '3', value: 3 }]
}
]
},
{
label: '4',
value: 4,
children: [
{
label: '5',
value: 5,
children: [{ label: '6', value: 6 }]
},
{
label: '7',
value: 7,
children: [{ label: '8', value: 8 }]
}
]
}
]
function mFlatObject (arr) {
if (arr instanceof Array) {
for (let i = 0; i < arr.length; i++) {
if (arr[i].children && arr[i].children.length > 0) {
arr = arr.slice(0, i + 1).concat(arr[i].children, arr.slice(i + 1))
}
}
} else {
console.log('传参错误')
}
return arr
}
console.log('对象降维', mFlatObject(arr))
以上便是对多维数组及嵌套对象的降维处理