热门标签 | 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~,也很不错的方法,还比我的省了一步!

 


推荐阅读
  • 本文详细介绍了中央电视台电影频道的节目预告,并通过专业工具分析了其加载方式,确保用户能够获取最准确的电视节目信息。 ... [详细]
  • 本文详细介绍如何使用Python进行配置文件的读写操作,涵盖常见的配置文件格式(如INI、JSON、TOML和YAML),并提供具体的代码示例。 ... [详细]
  • 前言--页数多了以后需要指定到某一页(只做了功能,样式没有细调)html ... [详细]
  • 本文探讨了如何在编程中正确处理包含空数组的 JSON 对象,提供了详细的代码示例和解决方案。 ... [详细]
  • 本文介绍如何使用阿里云的fastjson库解析包含时间戳、IP地址和参数等信息的JSON格式文本,并进行数据处理和保存。 ... [详细]
  • 使用GDI的一些AIP函数我们可以轻易的绘制出简 ... [详细]
  • 本文将介绍如何编写一些有趣的VBScript脚本,这些脚本可以在朋友之间进行无害的恶作剧。通过简单的代码示例,帮助您了解VBScript的基本语法和功能。 ... [详细]
  • 本文详细介绍了如何解决Uploadify插件在Internet Explorer(IE)9和10版本中遇到的点击失效及JQuery运行时错误问题。通过修改相关JavaScript代码,确保上传功能在不同浏览器环境中的一致性和稳定性。 ... [详细]
  • 探讨如何高效使用FastJSON进行JSON数据解析,特别是从复杂嵌套结构中提取特定字段值的方法。 ... [详细]
  • 1.如何在运行状态查看源代码?查看函数的源代码,我们通常会使用IDE来完成。比如在PyCharm中,你可以Ctrl+鼠标点击进入函数的源代码。那如果没有IDE呢?当我们想使用一个函 ... [详细]
  • 解决Element UI中Select组件创建条目为空时报错的问题
    本文介绍如何在Element UI的Select组件中使用allow-create属性创建新条目,并处理创建条目为空时出现的错误。我们将详细说明filterable属性的必要性,以及default-first-option属性的作用。 ... [详细]
  • 本文介绍如何使用Python进行文本处理,包括分词和生成词云图。通过整合多个文本文件、去除停用词并生成词云图,展示文本数据的可视化分析方法。 ... [详细]
  • 最近团队在部署DLP,作为一个技术人员对于黑盒看不到的地方还是充满了好奇心。多次咨询乙方人员DLP的算法原理是什么,他们都以商业秘密为由避而不谈,不得已只能自己查资料学习,于是有了下面的浅见。身为甲方,虽然不需要开发DLP产品,但是也有必要弄明白DLP基本的原理。俗话说工欲善其事必先利其器,只有在懂这个工具的原理之后才能更加灵活地使用这个工具,即使出现意外情况也能快速排错,越接近底层,越接近真相。根据DLP的实际用途,本文将DLP检测分为2部分,泄露关键字检测和近似重复文档检测。 ... [详细]
  • 本文探讨了在通过 API 端点调用时,使用猫鼬(Mongoose)的 findOne 方法总是返回 null 的问题,并提供了详细的解决方案和建议。 ... [详细]
  • 毕业设计:基于机器学习与深度学习的垃圾邮件(短信)分类算法实现
    本文详细介绍了如何使用机器学习和深度学习技术对垃圾邮件和短信进行分类。内容涵盖从数据集介绍、预处理、特征提取到模型训练与评估的完整流程,并提供了具体的代码示例和实验结果。 ... [详细]
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社区 版权所有