扁平化处理的5种常用方式

832 阅读1分钟

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

注:

  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();

\