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

题目:

已知如下数组:
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];

//数组扁平化
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));

解析:

  1. 数组扁平化,判断数组子元素是否为数组,是的话进行递归,否则把子元素变为数组
    • **this.map(item => (Array.isArray(item) ? item.flat() : [item]))**的执行结果为

    [[[1], [2], [2]], [[3], [4], [5], [5]], [[6], [7], [8], [9], [[11], [12], [[12], [13], [[14]]]]], [10]]

    • **[].concat(…this.map(item => (Array.isArray(item) ? item.flat() : [item])))**的执行结果为
    1. [].concat([1], [2], [2]) -> [1, 2, 2]
    2. [].concat([3], [4], [5], [5]) -> [3, 4, 5, 5]
    3. [].concat([].concat([6], [7], [8], [9], [].concat([11], [12], [].concat([12], [13], [].concat([14]))))) -> [6, 7, 8, 9, 11, 12, 12, 13, 14]
    4. [].concat([10]) -> [10]
    5. [].concat([1, 2, 2], [3, 4, 5, 5], [6, 7, 8, 9, 11, 12, 12, 13, 14], [10]) -> [1, 2, 2, 3, 4, 5, 5, 6, 7, 8, 9, 11, 12, 12, 13, 14, 10]
  2. 数组去重, 通过Set实现
    • new Set(this) -> {1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 13, 14, 10}
    • […new Set(this)] -> [1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 13, 14, 10]
  3. 数组升序排序,通过sort实现,若a - b > 0,返回true,a与b更换位置
  4. 最后结果为

[ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14 ]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值