sisterAn / blog

瓶博:每日更新,前端前进

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

数组扁平化、去重、排序

sisterAn opened this issue · comments

看一道面试题:

已知如下数组:var arr = [ [1, 2, 2], [3, 4, 5, 5], [6, 7, 8, 9, [11, 12, [12, 13, [14] ] ] ], 10];

编写一个程序将数组扁平化去并除其中重复部分数据,最终得到一个升序且不重复的数组

答案:

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

关于 Set 请查阅 Set、WeakSet、Map及WeakMap

commented

数组扁平化的处理,flat方法浏览器支持度很差,还是建议用递归的方式处理下

@sunnyBob 如果涉及到浏览器,早在babel阶段就会对flat方法自动转化了

commented

image
babel 不会解决这种浏览器兼容问题

@sunnyBob 你要引入@babel/polyfill啊,这个flat方法是polyfill实现的,怎么不会解决这种浏览器兼容问题?

commented

好的,查了下 core-js@3 增加了 flat 支持

var arr = [ [1, 2, 2], [3, 4, 5, 5], [6, 7, 8, 9, [11, 12, [12, 13, [14] ] ] ], 10]
// 扁平化
let flatArr = arr.toString()

我想到的也是用 toString去扁平化,不知道会不会有什么边界问题没办法处理