资讯专栏INFORMATION COLUMN

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

godruoyi / 705人阅读

摘要:题目已知如下数组编写一个程序将数组扁平化去并除其中重复部分数据,最终得到一个升序且不重复的数组实现数组扁平化去重排序解析数组扁平化判断数组子元素是否为数组是的话进行递归否则把子元素变为数组的执行结果为的执行结果为数组去重通过实现

题目:

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

解析:

数组扁平化,判断数组子元素是否为数组,是的话进行递归,否则把子元素变为数组

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])))的执行结果为

[].concat([1], [2], [2]) -> [1, 2, 2]

[].concat([3], [4], [5], [5]) -> [3, 4, 5, 5]

[].concat([].concat([6], [7], [8], [9], [].concat([11], [12], [].concat([12], [13], [].concat([14]))))) -> [6, 7, 8, 9, 11, 12, 12, 13, 14]

[].concat([10]) -> [10]

[].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]

数组去重, 通过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]

数组升序排序,通过sort实现,若a - b > 0,返回true,a与b更换位置

最后结果为

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

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/105531.html

相关文章

  • 一个题对于数组平化与去重与排序

    摘要:已知如下数组编写一个程序将数组扁平化去并除其中重复部分数据,最终得到一个升序且不重复的数组参考上大佬的方法一步到位。自己的多重函数法首先定义一个函数,实现数组的扁平化当数据都扁平化了,那么继续常规操作。 已知如下数组:var arr = [[1,2,2],[3, 4, 5, 5],[6, 7, 8, 9,[11,12,[12,13,[14,15,66,12]]]],10];编写一个程序...

    Terry_Tai 评论0 收藏0
  • 【进阶 6-1 期】JavaScript 高阶函数浅析

    摘要:引言本期开始介绍中的高阶函数,在中,函数是一种特殊类型的对象,它们是。简单来说,高阶函数是一个接收函数作为参数传递或者将函数作为返回值输出的函数。我们来看看使用它们与不使用高阶函数的方案对比。引言 本期开始介绍 JavaScript 中的高阶函数,在 JavaScript 中,函数是一种特殊类型的对象,它们是 Function objects。那什么是高阶函数呢?本节将通过高阶函数的定义来展...

    yiliang 评论0 收藏0
  • 前端 100 问:能搞懂80%请把简历给我

    摘要:解析第题第题为什么的和的中不能做异步操作解析第题第题京东下面代码中在什么情况下会打印解析第题第题介绍下及其应用。尽量减少操作次数。解析第题第题京东快手周一算法题之两数之和给定一个整数数组和一个目标值,找出数组中和为目标值的两个数。 引言 半年时间,几千人参与,精选大厂前端面试高频 100 题,这就是「壹题」。 在 2019 年 1 月 21 日这天,「壹题」项目正式开始,在这之后每个工...

    Scott 评论0 收藏0
  • JS数组几个不low操作(3)

    摘要:序列文章面试之函数面试之对象前言本文主要从应用来讲数组的一些骚操作如一行代码扁平化维数组数组去重求数组最大值数组求和排序对象和数组的转化等上面这些应用场景你可以用一行代码实现扁平化维数组终极篇是扁平数组的表示维度值为时维度为无限大开始篇实质 showImg(https://segmentfault.com/img/bVbpRMS?w=1858&h=1286); 序列文章 JS面试之函数...

    fish 评论0 收藏0
  • JavaScript专题系列文章

    摘要:专题系列共计篇,主要研究日常开发中一些功能点的实现,比如防抖节流去重类型判断拷贝最值扁平柯里递归乱序排序等,特点是研究专题之函数组合专题系列第十六篇,讲解函数组合,并且使用柯里化和函数组合实现模式需求我们需要写一个函数,输入,返回。 JavaScript 专题之从零实现 jQuery 的 extend JavaScritp 专题系列第七篇,讲解如何从零实现一个 jQuery 的 ext...

    Maxiye 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<