数组扁平化的5种方法

编写一个程序实现数组的扁平化,去重重复项,最终得到一个升序且不重复的数组

注:

  1. 扁平化:arr.flat(Infinity)
  2. 去重:[...new Set(arr)]    Array.from(new Set(arr))
  3. 排序:sort()
let arr = [1, 2, 3, 45, 58, [154, 25, 14, 14, [4587, 45, 125, [145, 20, 145, 23, [12, 10]]]]]
  1. 使用ES6中提供的Array.prototype.flat(Infinity)
let arr = [1, 2, 3, 45, 58, [154, 25, 14, 14, [4587, 45, 125, [145, 20, 145, 23, [12, 10]]]]]

arr = Array.from(new Set(arr.flat(Infinity))).sort((a, b) => a - b)

console.log(arr)
  1. 利用tostring()方法把数组直接变为字符即可实现扁平化处理再进行去重排序

注:通过toString()处理后不管又多少级,最后都会变成以逗号分隔的字符串,没有了中括号和所谓的层级,相当于直接扁平化处理了

  1. arr.tostring()     //把多维数组直接变成字符串
  2. arr.tostring().split(‘,’)    // 用逗号隔开
  3. arr.map(item=>{return Number(item)})   // 通过map的方法把字符串转为数字
let arr = [1, 2, 3, 45, 58, [154, 25, 14, 14, [4587, 45, 125, [145, 20, 145, 23, [12, 10]]]]]

arr = arr.toString().split(',').map(item => { return Number(item) })
  1. JSON.stringify(arr)(把json格式的对象转为json格式的字符串)

注:

  1. 通过JSON.stringfy(arr)  将json格式对象转换为json格式字符串
  2. 通过replace()方法把“[]”转换为空(replace(/(\[|\])/g,’’))
  3. 通过split(‘,’)用逗号将字符串拆分为数组
  4. 通过map()和Number()方法将数组中每一项遍历转换为数字
  5. 通过sort()方法排序
let arr = [1, 2, 3, 45, 58, [154, 25, 14, 14, [4587, 45, 125, [145, 20, 145, 23, [12, 10]]]]]

arr = JSON.stringify(arr).replace(/(\[|\])/g, '').split(',').map(item => { return Number(item) }).sort((a, b) => { return a - b })
  1.  用some()+ While() +concat() 循环

注:some()方法进行判断检验数组中的某一项有没有符合函数中提供规则的  返回true或者false

Some和find的区别: some 返回的是Boolean ,find 找到符合规则的,返回当前这一项,找到一项就不在找,没找到符合规则的返回undefined

let arr = [1, 2, 3, 45, 58, [154, 25, 14, 14, [4587, 45, 125, [145, 20, 145, 23, [12, 10]]]]]

while (arr.some(item => { return Array.isArray(item) })) {

arr = [].concat(...arr)

}
  1. 递归
let arr = [1, 2, 3, 45, 58, [154, 25, 14, 14, [4587, 45, 125, [145, 20, 145, 23, [12, 10]]]]]

~function () {

function myFlat() {

let result = [],

_this = this;

//循环arr中的每一项,把不是数组的存到result新数组中

let fn = (arr) => {

for (let item of arr) {

if (Array.isArray(item)) {

fn(item);

continue;

}

result.push(item)

}

}



fn(_this);

return result;

}

Array.prototype.myFlat = myFlat

}();

arr = arr.myFlat();

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值