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

2022-04-15 0 788

二维数组降维

使用数组实例方法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数组降维内容请搜索NICE源码以前的文章或继续浏览下面的相关文章希望大家以后多多支持NICE源码!

免责声明:
1、本网站所有发布的源码、软件和资料均为收集各大资源网站整理而来;仅限用于学习和研究目的,您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。 不得使用于非法商业用途,不得违反国家法律。否则后果自负!

2、本站信息来自网络,版权争议与本站无关。一切关于该资源商业行为与www.niceym.com无关。
如果您喜欢该程序,请支持正版源码、软件,购买注册,得到更好的正版服务。
如有侵犯你版权的,请邮件与我们联系处理(邮箱:skknet@qq.com),本站将立即改正。

NICE源码网 JavaScript JS数组降维的几种方法详解 https://www.niceym.com/32948.html