热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

js处理多维数组去重并升序的排列

前言今天遇到这样一道题:已知如下数组:vararr[[1,2,3],[3,4,5,5],[6,7,8,9,[11,12,[13,[14]]]],10]

前言

今天遇到这样一道题:


已知如下数组:

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

将数组扁平化去重并按升序排列的数组;


咋一看,这一道题还怪吓人类呀,这TMD是几维数组呀,眼都数花了,

在日常的开发中一般都是处理json数据,最多来个二维数组循环啥的就解决了,

当时心里那个毛毛的,写循环吧,这得循环多少次呀,自己看着都吐的感觉;

心里就一直想着能怎么取到里面的每个元素,然后排序就OK啦,但是怎么能一次取到呢?

当时想的是先转字符串,再字符串去重,发现字符串去重好麻烦,还要循环;



js中数组的方法:

toString():  toString() 在把数组转换成字符串时,首先要将数组的每个元素都转换为字符串。

join():join() 方法可以把数组转换为字符串,不过它可以指定分隔符。

sort() :方法对数组的元素进行排序。(该函数很适合字符串,如果数字按照字符串来排序,则 "25" 大于 "100",因为 "2" 大于 "1",因此,sort() 方法对数值排序时我们通过一个比值函数

js中字符串的方法:

split() 方法是 String 对象方法, 与 join() 方法操作正好相反。

ES6中Set()的用法:

Set是es6新增的数据结构,似于数组,但它的一大特性就是所有元素都是唯一的,没有重复的值,我们一般称为集合。

Set本身是一个构造函数,用来生成 Set 数据结构。

let arr1 = [...new Set(t)];          /* es6的...解构 */

let arr2= Array.from(new Set(t) );    /* Array.from()解析类数组 */




实现

var arr = [[1,2,3],[3,4,5,5],[6,7,8,9,[11,12,[13,[14]]]],10];// 平铺转字符串
var s = arr.toString(); // 转成数组并去重
let t = [...new Set(s.split(','))];// 比对排序
let newArr = t.sort((a,b)=>{ return a-b })
console.log(newArr)

从一小友哪里发现数组去重还有一个比new Set()性能好的方法: for...of + Object

 

 真是一山堪比一山高呀,小女子服服服!




总结

朋友给我推荐了flat();

Array.prototype.flat()用于将嵌套的数组“拉平”,变成一维数组。该方法返回一个新数组,对原数据没有影响.

flat(2): 表示拉平的层数, 默认为1层,2 表示两层;如果不管有多少层嵌套,都要转成一维数组,可以用Infinity关键字作为参数。

var arr = [[1,2,3],[3,4,5,5],[6,7,8,9,[11,12,[13,[14]]]],10];/*** 拉平成一维数组 */
let s = arr.flat(Infinity);let t = [...new Set(s)]; let newArr = t.sort((a,b)=>{ return a-b })console.log(newArr)

good~,也很不错的方法,还比我的省了一步!

 


推荐阅读
  • 深入探讨前端代码优化策略
    本文深入讨论了前端开发中代码优化的关键技术,包括JavaScript、HTML和CSS的优化方法,旨在提升网页加载速度和用户体验。 ... [详细]
  • 理解浏览器历史记录(2)hashchange、pushState
    阅读目录1.hashchange2.pushState本文也是一篇基础文章。继上文之后,本打算去研究pushState,偶然在一些信息中发现了锚点变 ... [详细]
  • importjava.io.*;importjava.util.*;publicclass五子棋游戏{staticintm1;staticintn1;staticfinalintS ... [详细]
  • 本文详细介绍了如何利用 Bootstrap Table 实现数据展示与操作,包括数据加载、表格配置及前后端交互等关键步骤。 ... [详细]
  • 本文介绍了如何正确配置Ajax POST请求,以确保前端发送的数据能够被后端正确解析。重点在于前端JSON对象的键名需要与后端实体类的字段名严格匹配。 ... [详细]
  • protobuf 使用心得:解析与编码陷阱
    本文记录了一次在广告系统中使用protobuf进行数据交换时遇到的问题及其解决过程。通过这次经历,我们将探讨protobuf的特性和编码机制,帮助开发者避免类似的陷阱。 ... [详细]
  • 二维码的实现与应用
    本文介绍了二维码的基本概念、分类及其优缺点,并详细描述了如何使用Java编程语言结合第三方库(如ZXing和qrcode.jar)来实现二维码的生成与解析。 ... [详细]
  • 本文深入探讨了Go语言中的接口型函数,通过实例分析其灵活性和强大功能,帮助开发者更好地理解和运用这一特性。 ... [详细]
  • 本文介绍了如何通过C#语言调用动态链接库(DLL)中的函数来实现IC卡的基本操作,包括初始化设备、设置密码模式、获取设备状态等,并详细展示了将TextBox中的数据写入IC卡的具体实现方法。 ... [详细]
  • 近期尝试从www.hub.sciverse.com网站通过编程手段获取数据时遇到问题,起初尝试使用WebBrowser控件进行数据抓取,但发现使用GET方法翻页时,返回的HTML代码始终相同。进一步探究后了解到,该网站的数据是通过Ajax异步加载的,可通过HTTP查看详细的JSON响应。 ... [详细]
  • 本文将从基础概念入手,详细探讨SpringMVC框架中DispatcherServlet如何通过HandlerMapping进行请求分发,以及其背后的源码实现细节。 ... [详细]
  • 深入理解:AJAX学习指南
    本文详细探讨了AJAX的基本概念、工作原理及其在现代Web开发中的应用,旨在为初学者提供全面的学习资料。 ... [详细]
  • 本文介绍如何使用JavaScript中的for循环来创建一个九九乘法表,适合初学者学习循环结构的应用。 ... [详细]
  • 小编给大家分享一下Vue3中如何提高开发效率,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获, ... [详细]
  • HTML:  将文件拖拽到此区域 ... [详细]
author-avatar
书苑幽香
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有