- 实现数组扁平化【数组降维】
- 现在有一个数组,对数组做降维处理
let arr = [ [1, 2, 3], [4, 5, 6], 12, 45, 6, [[1, 2, 3], [4, 5, 6], 12, 45, 6], [[1, 2, 3], [4, 5, 6], 12, 45, 6], ];
- 方法1
// 方法1 通过 float 实现对数组的降维 console.log(arr.flat(Infinity)) // [1, 2, 3, 4, 5, 6, 12, 45, 6, 1, 2, 3, 4, 5, 6, 12, 45, 6, 1, 2, 3, 4, 5, 6, 12, 45, 6]
- 方法2 使用普通递归处理
// 方法2 通过递归的方式去对数组进行降维 function arrayFlat1(arr) { // 定义一个结果数组 const result = [] // 定义一个递归函数 function dealArr(arr) { // for 循环遍历数组 for(let i =0;i<arr.length;i++) { // 判断当前成员是不是数组 是数组的话,递归处理,不是数组则push到结果数组中 Array.isArray(arr[i]) ? dealArr(arr[i]) : result.push(arr[i]) } } // 调用递归函数 dealArr(arr) // 返回结果数组 return result } // 方法2 简写 一个递归 function arrayFlat2(arr) { // 定义一个结果数组 let result = [] // 遍历数组 for (let i = 0; i < arr.length; i++) { // 判断传递的数组中的每一项是不是数组,如果是数组,那么就要进行递归处理 // 因为arrayFlat函数返回值时一个数组,因此可以使用数组拼接的方式进行处理 result = Array.isArray(arr[i]) ? result.concat(arrayFlat2(arr[i])) : result.concat(arr[i]); // 也可以使用下面的方式 // Array.isArray(arr[i]) ? (result = result.concat(arrayFlat2(arr[i]))) : result.push(arr[i]); } // 返回结果数组 return result } console.log(arrayFlat1(arr)) // [1, 2, 3, 4, 5, 6, 12, 45, 6, 1, 2, 3, 4, 5, 6, 12, 45, 6, 1, 2, 3, 4, 5, 6, 12, 45, 6] console.log(arrayFlat2(arr)) // [1, 2, 3, 4, 5, 6, 12, 45, 6, 1, 2, 3, 4, 5, 6, 12, 45, 6, 1, 2, 3, 4, 5, 6, 12, 45, 6]
- 方法3 使用数组方法reduce实现
// 方法3 使用 reduce实现 function arrayFlatReduce1(arr) { // 返回结果 return arr.reduce((prev, cur) => { // 判断是否为数组 为数组时递归调用 Array.isArray(cur) ? (prev = prev.concat(arrayFlatReduce1(cur))) : prev.push(cur); return prev; }, []); } // 方法3 简写 function arrayFlatReduce2(arr) { return arr.reduce((prev, cur) => { return prev.concat(Array.isArray(cur) ? arrayFlatReduce2(cur) : cur) }, []) } console.log(arrayFlatReduce1(arr)) // [1, 2, 3, 4, 5, 6, 12, 45, 6, 1, 2, 3, 4, 5, 6, 12, 45, 6, 1, 2, 3, 4, 5, 6, 12, 45, 6] console.log(arrayFlatReduce2(arr)) // [1, 2, 3, 4, 5, 6, 12, 45, 6, 1, 2, 3, 4, 5, 6, 12, 45, 6, 1, 2, 3, 4, 5, 6, 12, 45, 6]
JS - 数组扁平化【数组降维】的3种方法
于 2022-02-13 21:13:53 首次发布