专栏首页京程一灯js中基础数据结构数组去重问题

js中基础数据结构数组去重问题

原文作者:Cayley,京程一灯特邀作者 如果你对Cayley感兴趣 可以关注她的微博/简书“Cayley的编程之路”

引言

一说到数据结构,很多人就开始头大了,因为总感觉像什么数据结构,算法之类的概念都很高大上,我知道有很多的同学都是毕业后觉得编程高薪,亦或培训速成所以就选择了一门语言,从而从事了这个行业,但是对于编程语言的一些基础,以及相关的系列知识结构其实是缺失的,所以业余时间多花点功夫多学习,其实都是可以补上来的。

拿我自己举例子吧,我学的专业虽然不是“计算机科学与技术”也不是“软件工程”这样纯计算机的专业,但是是和计算机专业相关的学科,所以上学的时候,接触过C,Java,C#等语言,也有一些数据结构的概念,数据库操作也略知一二,也系列的学过计算机网络基础等课程,虽然上学的时候学的不好也不精,但至少的思想和概念是有的,所以在此也给一些刚刚入技术,或者转行的同学一点提示,除了本职的技术语言和繁忙的业务逻辑之外,这些基础概念还是应该要补上来的。

一.什么是数据结构

数据结构是一种存储和组织数据的方式

至于我是什么时候有了关于“数据结构” 这个概念,应该是今年的7月份起,加入了目前的公司,接触复杂的业务逻辑,处理复杂的数据,公司有专门的几十人团队的大数据部门,所以可想而知,每次处理接口返回过来的数据,不再是以前单一结构的数据,而是相对比较复杂,设计合理的接口数据,那么这个时候你直接拿到数据,并不是可以直接使用的,它需要你做二次处理之后才能用了展示或者处理逻辑用的数据

举个栗子

比如我们获取到了一段这样的数据,但是临时我们需要往数据中再加一个字段,比如需要给每一项加一个“country"这个字段,因此我们就需要将这组数据进行一个处理,数组是最简单的内存数据结构,js中以及几乎所有的语言都支持数组类型,所以学好js中的数据结构,首先要学习的就是对数组的处理

一些数据片段

javascript语言一直不断的完善和更新,去年有了es6,今年又有了es7,数组中涉及的方法和API也是在不断的完善,本文不介绍es5之后的方法扩展,需要的同学请查看相关的资料学习,先来概览一下常用的可以高效处理数组的方法,这些方法可以在日常工作中帮我们处理很多简单的逻辑

处理数据时常用的:具有遍历作用的方法

forEach(),map(), some()/every(), filter(),reduce()/reduceRight()方法都具有一个遍历作用,但是它们在遍历的同时还具有其特定的功能,以上这几个方法是我在处理数组数据时常用的方法,之前没有使用过或者使用不全的同学可以去搜索一下它们各自的功能

二.数组去重

思考?如何去除数组中重复的项

例如数组:[1,3,4,3,5]我们在做去重的时候,一开始想到的肯定是,逐个比较,外面一层循环,内层后一个与前一个一比较,如果是久不将当前这一项放进新的数组,挨个比较完之后返回一个新的去过重复的数组

不好的实践方式

上述方法效率极低,代码量还多,思考?有没有更好的方法

这时候不禁一想当然有了!!!hashtable 啊,通过对象的hash办法可以有效的去除掉重复的内容

成功输出去重后的数组

既然数组的方法都已经如此完善了,岂不是有更好的遍历方法

使用forEach替代for循环

最后!如果数组中重复出现的并不是简单的数据类型,每一项都是一种复杂的对象类型的数据结构该如何去重呢?

例如数组是这样的:

第一项和最后一项重复

其实还是利用hash的思想,但是转化一下思维,比如我们可以把这个数组中的每一项当作一个对象的属性也,然后枚举这个属性

附上小方法

解析:上面这个方法呢利用Object.keys()这个方法枚举我们去重后的一个对象unique,这个方法返回一个属性列表数组,之后我们利用数组的map()方法遍历并且给每一项执行一个callback,map()会返回一个新的数组

完结

以上的小栗子,由最开始我们的古老思想和低效方法逐步到最后数组去重复杂项,这一个个过程都体现了数组的乐趣所在,同时也体现出了数据结构的魅力之处,数组只是一种简单的数据结构,还有很多更复杂更有意识的知识等待我们去挖掘,也希望小伙伴可以跟我分享更多的知识和乐趣,2107年欢迎你和我一起做一个不断努力学习的知识分子

Cayley 一个不断努力学习的女程序员


快扫描二维码,与志佳老师来聊聊吧~~

本文分享自微信公众号 - 京程一灯(jingchengyideng),作者:Cayley

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2017-01-05

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • JavaScript中的数组创建

    数组是一个包含了对象或原始类型的有序集合。很难想象一个不使用数组的程序会是什么样。

    疯狂的技术宅
  • 尝鲜 ES2019 的新功能 [每日前端夜话0x38]

    ECMAScript 每年都会发布一个新版本,其中的提案是已经正式通过的,并分发给开发者和用户。本文将讨论该语言的最新版本,以及它又具有了什么新功能。

    疯狂的技术宅
  • Vue.js 中的片段

    为了使诸如屏幕阅读器之类的辅助技术能够解释网页和应用程序,无障碍支持是必需的。为了使这些技术起作用,开发人员需要考虑可访问性。

    疯狂的技术宅
  • 前端-Vue,你或许不知道的这些小技巧

    用Vue开发一个网页并不难,但是也经常会遇到一些问题,其实大部分的问题都在文档中有所提及,再不然我们通过谷歌也能成功搜索到问题的答案,为了帮助小伙伴们提前踩坑,...

    grain先森
  • LeetCode 151:给定一个字符串,逐个翻转字符串中的每个单词

    Given an input string, reverse the string word by word.

    爱写bug
  • LeetCode 151:给定一个字符串,逐个翻转字符串中的每个单词 Reverse Words in a String

    Given an input string, reverse the string word by word.

    爱写bug
  • 算法与数据结构(十五) 归并排序(Swift 3.0版)

    上篇博客我们主要聊了堆排序的相关内容,本篇博客,我们就来聊一下归并排序的相关内容。归并排序主要用了分治法的思想,在归并排序中,将我们需要排序的数组进行拆分,将其...

    lizelu
  • Python学习手册:NumPy快速参考表

    如果你想用Python做数据分析,那么NumPy是你必须掌握的其中一个基础计算包。它可以很好的替代Python列表,因为NumPy数组更紧凑,允许快速读写访问,...

    小莹莹
  • 信息消费释放万亿内需

    当前我国经济发展的要素条件正发生深刻变化,增长速度处于换挡期,结构调整迈入紧要关口。培育新的消费热点,促进信息消费,增强内需拉动经济的主引擎作用,是实现经济内生...

    静一
  • 在 Vue.js 中使用无状态组件[每日前端夜话0xB9]

    同时,Vue 实例是一个 ViewModel,它包含的选项包括表示元素的模板、要安装的元素、方法和初始化时的生命周期钩子。

    疯狂的技术宅

扫码关注云+社区

领取腾讯云代金券