JS数组降维的几种方法详解

 更新时间:2021年04月09日 09:45:48   作者:何其所幸,  
这篇文章主要介绍了JS数组降维的几种方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

二维数组降维

使用数组实例方法concat和ES6扩展运算符降维

let arr=[1,2,[3,4],5];
let arr1=[].concat(...arr);
//先使用扩展运算符打散最外边的数组,concat自带打散粘合数组的功能
console.log(arr1);
// [1, 2, 3, 4, 5]

//ES6之前用apply打散数据的兼容性写法
var arr2=[1,2,[3,4],5];
var arr3=[].concat.apply([],arr2);
console.log(arr3);
// [1, 2, 3, 4, 5]

多维数组降维

递归降维

//几种利用数组函数递归降维的写法
//some&concat
//利用some检查数组中是否含有数组有就在调用自己进行降维
function fun(arr){
  arr=[].concat(...arr); 
  //再检查降维后的数组中是否还包含子数组
  let hasArray=arr.some(function(elem){
      return Array.isArray(elem);
  })
  if(hasArray){ //如果包含子数组
      arr=fun(arr);//就只能再降维一次,直到检查不再包含子数组为止
  }
    return arr;
};

//forEach&instanceof
//对数组每个元素进行判断看其是不是数组是在继续调用自己,不是把他放进提前准备的空数组中 
function fun2(arr){
  let ret = [];
  let toArr = function(arr){
    arr.forEach(function(item){
      item instanceof Array ? toArr(item) : ret.push(item);
    });
  }
  toArr(arr);
  return ret;
}

//reduce&concat
//最后准备一个空数组,看传入数组中的每一项是不是数组是就重新调用自己不是就用concat汇总到空数组中
function fun3(sarr){
    return sarr.reduce((pre,val)=>{
        return Array.isArray(val) ? pre.concat(fun3(val)): pre.concat(val)
    },[])
}

Array.prototype.flat()

ES10 新增Array.prototype.flat(),用于将嵌套的数组打散,变成一维的数组。该方法返回一个新数组,对原数据没有影响。

var arr1 = [1, 2, [3, 4]];
arr1.flat(); 
// [1, 2, 3, 4]
 
var arr2 = [1, 2, [3, 4, [5, 6]]];
arr2.flat();
// [1, 2, 3, 4, [5, 6]]
 
var arr3 = [1, 2, [3, 4, [5, 6]]];
arr3.flat(2);
// [1, 2, 3, 4, 5, 6]
 
//使用 Infinity 作为深度,展开任意深度的嵌套数组
arr3.flat(Infinity); 
// [1, 2, 3, 4, 5, 6]

到此这篇关于JS数组降维的几种方法的文章就介绍到这了,更多相关JS数组降维内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 原生JS实现的碰撞检测功能示例

    原生JS实现的碰撞检测功能示例

    这篇文章主要介绍了原生JS实现的碰撞检测功能,涉及javascript鼠标事件响应及页面图形坐标位置运算、检测相关操作技巧,需要的朋友可以参考下
    2018-05-05
  • ES6 Promise对象概念与用法分析

    ES6 Promise对象概念与用法分析

    这篇文章主要介绍了ES6 Promise对象概念与用法,简单分析了Promise对象的基本状态与三种重要方法,并结合实例形式给出相关使用技巧,需要的朋友可以参考下
    2017-04-04
  • 添加、删除HTML结点 & 上传图片预览

    添加、删除HTML结点 & 上传图片预览

    添加、删除HTML结点 & 上传图片预览...
    2006-10-10
  • JavaScript中Number的对象解析

    JavaScript中Number的对象解析

    这篇文章主要介绍了JavaScript中Number的对象解析,Number对象是数值对应的包装对象,可以作为构造函数使用,也可以作为工具函数使用,感兴趣的朋友可以参考一下下面文章内容
    2022-08-08
  • JavaScript中捕获/阻止捕获、冒泡/阻止冒泡方法

    JavaScript中捕获/阻止捕获、冒泡/阻止冒泡方法

    本篇文章主要介绍了JavaScript中捕获/阻止捕获、冒泡/阻止冒泡方法,具有一定的参考价值,有兴趣的可以了解一下。
    2016-12-12
  • JS 获取文件后缀,判断文件类型(比如是否为图片格式)

    JS 获取文件后缀,判断文件类型(比如是否为图片格式)

    这篇文章主要介绍了JS 获取文件后缀,判断文件类型(比如是否为图片格式),需要的朋友可以参考下
    2020-05-05
  • JavaScript 中有关数组对象的方法(详解)

    JavaScript 中有关数组对象的方法(详解)

    下面小编就为大家带来一篇JavaScript 中有关数组对象的方法(详解)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-08-08
  • js插件实现图片滑动验证码

    js插件实现图片滑动验证码

    这篇文章主要为大家详细介绍了js插件实现图片滑动验证码,滑动模块,实现验证功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-10-10
  • 浅谈JavaScript 的执行顺序

    浅谈JavaScript 的执行顺序

    JavaScript是一种描述型脚本语言,它不同于java或C#等编译性语言,它不需要进行编译成中间语言,而是由浏览器进行动态地解析与执行。如果你不能理解javaScript语言的运行机制,或者简单地说,你不能掌握javascript的执行顺序,那你就犹如伯乐驾驭不了千里马
    2015-08-08
  • 微信小程序实现弹出框提交信息

    微信小程序实现弹出框提交信息

    这篇文章主要为大家详细介绍了微信小程序实现弹出框提交信息,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-07-07

最新评论