将数组扁平化并去除重复值,最终得到一个升序且不重复的数组

217 阅读1分钟

var arr=[[1,2,3],[3,4,5,5],[6,7,8,9,[11,12,[12,13,[14]]]]];

方案一: es6的array.flat与Set结合再sort

//扁平化
let flatArr=arr.flat(4);   //[1, 2, 3, 3, 4, 5, 5, 6, 7, 8, 9, 11, 12, 12, 13, 14]
//去重
let disArr=Array.from(new Set(flatArr));  //[1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 13, 14]
//升序
let result=disArr.sort((a,b)=>{return a-b}); //[1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 13, 14]

方案二:[].concat(...arr)与set 结合再sort

function flatten(arr){
  while(arr.some(item=>Array.isArray(item))){
    arr=[].concat(...arr);
  }
  return arr
}
flatten(arr);
Array.from(new Set(flatten(arr))).sort((a,b)=>a-b

方案三:递归(Es6简写)

const flatten=arr=>arr.reduce(acc,cur)=>(
   Array.isArray(cur)?
      [...acc,...flatten(cur):
      [...acc,cur],[])
)

方案四:array=>string=>[string]=>[number]=>[sort]

var arr1=(arr.join(',').split(',').map(item=>Number(item)));
Array.from(new Set(arr1))

方案五:正则替换[]

function flatten(arr){
 return Array.from(new Set(
    JSON.parse('['+JSON.stringify(arr).replace(/\[|\]/g,'')+']')
  ))
}
flatten(arr)