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

作者: 王猫儿的笔记本 | 来源:发表于2017-01-04 23:19 被阅读602次

引言

一说到数据结构,很多人就开始头大了,因为总感觉像什么数据结构,算法之类的概念都很高大上,我知道有很多的同学都是毕业后觉得编程高薪,亦或培训速成所以就选择了一门语言,从而从事了这个行业,但是对于编程语言的一些基础,以及相关的系列知识结构其实是缺失的,所以业余时间多花点功夫多学习,其实都是可以补上来的,拿我自己举例子吧,我学的专业虽然不是“计算机科学与技术”也不是“软件工程”这样纯计算机的专业,但是是和计算机专业相关的学科,所以上学的时候,接触过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 一个不断努力学习的女程序员


相关文章

  • 数组去重

    整理自js中基础数据结构数组去重问题思考?如何去除数组中重复的项 例如数组:[1,3,4,3,5]我们在做去重的时...

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

    引言 一说到数据结构,很多人就开始头大了,因为总感觉像什么数据结构,算法之类的概念都很高大上,我知道有很多的同学都...

  • 2017年1月第二周成长回顾

    学习与写作 首先激动的说一下本周写了2篇文章 1.本周完成了一篇技术文章《js中基础数据结构数组去重问题》,其实最...

  • 数组的去重和数组中对象的去重

    数组中对象去重 方式1 jq方式 方式2 原生js方式 普通数组的去重 方式1 普通的数组去重js 方式2 Se...

  • 数组去重

    一般数据结构的数组去重, 数组对象去重,根据某个属性进行去重

  • js中数组去重的方法

    在实际工作或面试中,我们经常会遇到“数组去重”问题,接下来就是使用js实现的数组去重的多种方法: 1.将数组的每一...

  • js 数组对象去重问题

    1、问题阐述 在做列表数据的时候,本地缓存数据数组,在请求到新数据以后需要添加到本地缓存中并显示到列表,其中比...

  • JS文集的目录

    js基础心法 深浅拷贝(递归)深浅拷贝(首层浅拷贝) js 数据处理 数组对象查找的常见操作数组对象去重的常见操作...

  • 数组中对象去重 js

    有亦可,无亦然 前端QQ群: 981668406在此附上我的QQ: 2489757828 有问题的话可以一同探讨我...

  • 排序图解:js排序算法实现

    之前写过js实现数组去重, 今天继续研究数组: 排序算法实现。 排序是数据结构主要内容,并不限于语言主要在于思想;...

网友评论

  • 云香水识:看到了,简单BB两句。
    1. JSON.stringify方式不严谨, 在plain object 中显示的key顺序不一致会导致结果不符合预期。
    2. 如果对象的属性层级更深,这个对比处理复杂度更高,操作难度也不小
    3. 对于API设计是需要根据实际的使用方式来的,
    - 更多时候我们需要根据特征对比,这个时候可以假设对比哪些字段 map = {}, tmp = 'name,from', arr.filter(item => { k = tmp.replace(/\w+/g, key => item[key]); !map[k] || (map[k] = 1) })
    - 如果真的需要对象属性相等判断, 还是需要一层一层递归对比的,
    function equals (a, b) {
    if (a == b) return true;

    keys1 = Object.keys(a).sort();
    keys2 = Object.keys(b).sort();
    if (keys1.join(',') !== keys2.join(',')) return false;

    return !keys1.find(k => !equals(a[k], b[k]) )
    }
    王猫儿的笔记本:@云香水识 谢谢您的指导和建议 学习了

本文标题:js中基础数据结构数组去重问题

本文链接:https://www.haomeiwen.com/subject/xplgmttx.html