算法题

171 阅读1分钟
已知如下数组:var arr = [ [1, 2, 2], [3, 4, 5, 5], [6, 7, 8, 9, [11, 12, [12, 13, [14] ] ] ], 10];编写一个程序将数组扁平化去并除其中重复部分数据,最终得到一个升序且不重复的数组

第一种方法:

// 扁平化

let flatArr = arr.flat(Infinity)

// 去重
let disArr = Array.from(new Set(flatArr))

// 排序
let result = disArr.sort((a, b) => {

   return a-b

})

console.log(result)

第二种方法:

const list1 = Array.from(new Set(arr.flat(Infinity))).sort((a, b) => a - b);
console.log(list1);

第三种方法:

Array.prototype.flat = function () {
    return [].concat(...this.map(item => (Array.isArray(item) ? item.flat() : [item])));
}

Array.prototype.unique = function () {
    return [...new Set(this)]
}

const sort = (a, b) => a - b;
console.log(arr.flat().unique().sort(sort));

第四种方法:

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