数组扁平化处理 多维数组-->一维数组

需求:将多维数组转化为一维数组

let arr = [[1,2],[33,4],[5]];
let str = JSON.stringify(arr); // json格式字符串 '[\"1\",\"2\",\"33\",\"4\",\"5\"]'

实现方法1:

flat()方法:这个方法为ES10方法,目前未在所有浏览器中都兼容

let arr = [[1,2],[33,4],[5]];
// 参数指要提取嵌套数组的结构深度,默认值为1,即默认只处理第一层的数组结构
// Infinity 指递归嵌套的所有层级
let flatArray = arr.flat(Infinity);
console.log(flatArray);  

实现方法2:

replace()和split()方法

let arr = [[1,2],[33,4],[5]];
let str = JSON.stringify(arr);
str.replace(/\[|\]/g, "").split(",");
// 或者str.replaceAll("[", "").replaceAll("]", "").split(",")

实现方法3:

字符串拼接

let arr = [[1,2],[33,4],[5]];
let str = JSON.stringify(arr);
str = str.replace(/\[|\]/g, "");
str = "[" + str + "]";
let newArr = JSON.parse(str); // JSON.parse是将json格式的字符串转换为json对象

实现方法4:

递归处理

let newArr = [];
function fn (arr) {
    for (let i = 0; i < arr.length; i++) {
       let item = arr[i];
       if (Array.isArray(item)) {
           fn(item);  
        } else {
           newArr.push(item);  
        }              
    }  
}    

let arr = [[1,2],[33,4],[5]];
fn(arr);

实现方法5:

reduce()方法

function flatten(arr) {
    return arr.reduce((pre, cur) => {
         return pre.concat(Array.isArray(cur) ? flatten(cur) : cur);
    })  
}

let arr = [[1,2],[33,4],[5]];
flatten(arr);
// concat方法将两个或多个数组合并为一个新数组
// reduce方法为数组中每个元素依次执行回调函数,可以作为一个累加器,数组中每个值(从左到右)开始缩减直至最终成为一个值,还可以用来将多维数组转化为一维数组
// 语法:array.reduce(function(total, currentValue, currentIndex, arr), initialValue)
// total: 初始值,或者计算结束后的返回值
// currentValue: 当前元素
// initialValue: 传递给函数的初始值
// currentIndex: 当前元素的索引
// arr: 当前元素所属的数组对象,数组中有多少个元素即有多少个数组对象

实现方法6:

扩展运算符

let arr = [1, 2, [3, 4], [5, [6, 7]]];
while(arr.some(Array.isArray)) {
  arr = [].concat(...arr);                  
};
// 通过循环和扩展运算符结合起来 some()方法返回一个布尔值,表示是否存在特定条件下的元素
posted @ 2024-02-23 17:51  nini-  阅读(41)  评论(0)    收藏  举报