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

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

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 @   nini-  阅读(25)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
点击右上角即可分享
微信分享提示