常用技巧之JS判断数组中某元素出现次数

现在前端开发经常需要从api中获取返回的数组,

也许是array,也许是json,

不管是什么,都需要对返回的数据进行再处理,

其中一个重要且经常用到的操作,

就是“判断重复”及“重复的次数”

例如,

返回一个班级的json,

要求判断有多少个孩子的年龄是相同的?

这种对数据的操作很常见的。。

现在我们先看代码:

看不清,不要紧,我大概讲一下,很简单的。

首先它的结构是这样的:

(1),声明一个新的数组newArr,一个临时变量temp,一个计数器count;

(2),一个二重嵌套的for循环;

(3),一个if判断;

(4),一个return方法;

那么,在运行的时候呢,

arrCheck这个函数的参数arr,就是我们要传入的数组[1,2,3,3,4]了;

首先声明一个新数组newArr=[],一个temp,一个计数器;

然后进入第一重for循环,

在这里把数组[1,2,3,3,4]的每项通过

temp = arr[i];

赋值给temp,

然后在第二重for循环里,用if(arr[j] == temp)来进行比较,

可能有些同学对于for for嵌套循环有点晕,其实这个很简单的,

就是外层for循环数组一个数,

内层for循环整个数组一遍,

看上面的代码示例,可以很清楚的看到,

i循环一个数字,j把整个数组循环了一遍;

那就意味着,数组有多长,

就会用for for嵌套把整个数组循环多少次

那么回来这个判断重复次数的例子中来,

我们可以通过for for循环中的if(arr[j] == temp)

把整个数组中的每一项,都和整个数组进行一次比较,

如果相等,就把count++,

然后执行arr[j]=-1,为什么要这么做呢?

因为这样就可以不再比较,已经确定重复的数组项了。

例如,arr=[1,2,3,3,4]

arr[2]是3,

arr[3]也是3

那么3已经确定是重复并计数过的了,就不再比较它了。

然后 if(temp != -1),

这个就比较好理解了,它只是一个筛选判断而已,

用来不显示被值为-1的值。

大家运行下示例程序,就明白了。

最后就是返回已经筛选完成的新数组 newArr。

这个小例子的重点有三个:

1,通过嵌套for循环,把数组的每一项,跟整个数组中的所有项,比较一遍;

2,通过if判断,如果有相等的项,count++,并把相等的项置为-1,这样可以判断等于-1的就是重复的,就不再加入新数组了;

3,用if判断!=-1,决定是否加入新数组中,返回。

完了,

很简单吧,

还看不懂的同学,可以用console.log,一步一步的打印结果,帮助理解。

JS判断重复数组是否有重复项

原文发布于微信公众号 - web前端教室(webfeel)

原文发表时间:2016-01-04

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

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏积累沉淀

Java设计模式(五)----原型模式

原型模式(Prototype) 一、概述 二、结构 三、浅度克隆和深度克隆  浅度克隆  深度克隆 一、概述  定义:原型模式属...

1989
来自专栏Python小屋

Python求解进制问题(阿里巴巴2015笔试题)

问题描述:用十进制计算30的阶乘,然后把结果转换成三进制表示,那么该进制表示的结果末尾会有多少个连续0? 解析:作为笔试题的话,要想按照题意先把阶乘结果计算出来...

3687
来自专栏java学习

面试题18(覆盖(重写)与重载的关系是什么?)

覆盖(重写)与重载的关系是什么? A) 覆盖(重写)只有出现在父类与子类之间,而重载可以出现在同一个类中 B)覆盖(重写)方法可以有不同的方法名,而重载方法必须...

2948
来自专栏xingoo, 一个梦想做发明家的程序员

程序猿的日常——Java基础之抽象类与接口、枚举、泛型

再次回顾这些基础内容,发现自己理解的又多了一点。对于一些之前很模糊的概念,渐渐的清晰起来。 抽象类与接口 抽象类通常是描述一些对象的通用方法和属性,并且默...

19010
来自专栏诸葛青云的专栏

C语言什么是结构体?初步学习C语言结构体三部曲

结构体部分内容,涉及结构体定义,结构体变量,结构体指针,结构体数组,更多内容敬请关注。

1563
来自专栏Python爱好者

Java基础笔记06

1508
来自专栏老九学堂

一分钟掌握C语言结构体常见方法

把结构体名称去掉,这样更简洁,不过也不能定义其他同结构体变量了——至少我现在没掌握这种方法。

1312
来自专栏Java帮帮-微信公众号-技术文章全总结

第十二天 面向对象-构造方法继承this super【悟空教程】

1947
来自专栏司想君

JavaScript闭包,只学这篇就会了

昨天发的文章,排版出现了重大失误。让大家的眼睛受累了。今天再发一遍。 这篇文章使用一些简单的代码例子来解释JavaScript闭包的概念,即使新手也可以轻松参透...

2828
来自专栏编程心路

Java基础-抽象类和接口

抽象类和接口也是 Java 面试中常考的,下面就来总结一下抽象类和接口的相关知识。

1445

扫码关注云+社区

领取腾讯云代金券