题目要求:
let arr = [ 1, 2, 3, [ 4, 5, 3 ], [ 4, 3, 2, [ 5, 4, 3 ] ] ] 将这个数组:扁平化,去重,排序(升序)
步骤:
1. 扁平化处理
(1)递归遍历
Array.prototype._flat_1 = function(){
const result = this.map(item =>{
if(Array.isArray(item)){
return item._flat_1()
}
return [item]
})
return [].concat(...result)
}
(2)reduce函数迭代
Array.prototype._flat_2 = function(){
return this.reduce(function(pre,next){
return pre.concat(Array.isArray(next) ? next._flat_2() : next)
},[])
}
(3)some函数实现
Array.prototype._flat_3 = function(){
let result = this
while(result.some(item=>Array.isArray(item))){
result = [].concat(...result)
}
return result
}
(4)for…of循环实现
Array.prototype._flat_4 = function(){
let result = []
for (const item of this) {
if(Array.isArray(item)){
result = result.concat(...item)
}else{
result.push(item)
}
}
return result
}
2.去重
(1)使用set集合(ES6)
Array.prototype.getUnique_1 = function(){
// return [...new Set(this)]
return Array.from(new Set(this))
}
(2)使用map从原型上遍历(ES5)
Array.prototype.getUnique_2 = function(){
let map = {};
let res = [];
for (const item of this) {
if(!map.hasOwnProperty(item)){
map[item] = 1;
res.push(item)
}
}
return res
}
3.排序
(1)直接使用sort
const sortTag = (a, b) => a - b;
// 最终结果
console.log(arr._flat_4().getUnique_2().sort(sortTag));