题目要求:
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 = thiswhile(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));
