数组的判断、数组扁平化处理、数组的方法总结

一、判断数组的几种方法:

1.1 instanceof 运算符

let arr = [1,2,3];
console.log(arr instanceof Array); //true

1.2 isArray 

let arr = [1,2,3];
console.log(Array.isArray(arr));  //true

1.3 Array原型链上的isPrototypeOf

let arr = [1,2,3];
console.log(Array.prototype.isPrototypeOf(arr)); //true

1.4 Object.prototype.toString.call()  

let arr = [1,2,3];
console.log(Object.prototype.toString.call(arr) == '[object Array]'); //true

1.5 Object.getPrototypeOf()

let arr = [1,2,3];
console.log(Object.getPrototypeOf(arr) == Array.prototype); //true

Object方法合集Api: Object - JavaScript | MDN

1.6 constructor 构造函数

let arr = [1,2,3];
console.log(arr.constructor == Array); //true

二、数组的扁平化处理

数组扁平化是指将一个多维数组变为一维数组

2.1 ES6的扩展运算符+concat

let arr = [1,[2,[3,[4]]]];
const dealArr = (arr:any) => {
 while(arr.some((item: any) => Array.isArray(item))) {
  arr = [].concat(...arr);
 }
  return arr;
}
console.log(dealArr(arr)) // [1,2,3,4]

2.2 使用reduce函数

reduce函数的参数是previou(上一个)和current(当前)

let arr = [1,[2,[3,[4]]]];
const dealArr = (arr: any) => {
  return arr.reduce((prev: Array<number>, cur: Array<number>) => {
    return prev.concat(Array.isArray(cur) ? dealArr(cur) : cur);
  }, []); //prev的初始值是空数组
};
console.log(dealArr(arr)) // [1,2,3,4]

2.3 split 和 toString 

let arr = [1,[2,[3,[4]]]];
const dealArr = (arr: any) => {
 return arr.toString().split(",").map((val:any)=> {
  return parseInt(val);
 })
};
console.log(dealArr(arr)) // [1,2,3,4]

2.4  ES6 中的 flat 

flat() 方法会按照一个可指定的深度递归遍历数组,并将所有元素与遍历到的子数组中的元素合并为一个新数组返回。

语法:

let newArray = arr.flat([depth])

参数:depth 可选,指定要提取嵌套数组的结构深度,默认值为 1。使用 Infinity,可展开任意深度的嵌套数组。

let arr = [1,[2,[3,[4]]]];
console.log('arr1', arr.flat()); //  [1,2,[3,[4]]]
console.log('arr1', arr.flat(2)); //  [1,2,3,[4]]
console.log('arr1', arr.flat(Infinity)); // [1,2,3,4]

2.5 递归实现

let arr = [1,[2,[3,[4]]]];

const dealArr = (arr: any) => {
  let newArr: Array<number> = [];
  arr.forEach((item: any) => {
    if (Array.isArray(item)) {
      newArr = newArr.concat(dealArr(item));
    } else {
      newArr.push(item);
    }
  });
  return newArr;
};
console.log('895', dealArr(arr));

三、数组的方法总结:

w3school:JavaScript 数组参考手册

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值