JS实现js中数组添加数组去重(重复嘚元素只保留一个)
它是最简单的js中数组添加数组去重方法(indexOf方法)
实现思路:新建一个js中数组添加数组遍历去要重的js中数组添加数组,当值不在新js中数组添加数组的时候(indexOf为-1)就加入该新js中数组添加数组中;
调用indexOf方法性能和方法1差不多
实现思路:如果当前js中数组添加數组的第 i 项在当前js中数组添加数组中第一次出现的位置不是 i,那么表示第 i 项是重复的忽略掉。否则存入结果js中数组添加数组
实现思路:给传入的js中数组添加数组排序,排序后相同的值会相邻然后遍历排序后js中数组添加数组时,新js中数组添加数组只加入不与前一值重复嘚值
4.优化遍历js中数组添加数组法(不推荐)
实现思路:双层循环,外循环表示从0到arr.length内循环表示从i+1到arr.length
将没重复的右边值放入新js中数组添加数组。(检测到有重复值时终止当前循环同时进入外层循环的下一轮判断)
上面遍历经过测试后有bug并不能完全去重
因为这次我做的是對js对象元素去重,我在参考时发现此bug如果时js中数组添加数组去重,建议用第一种方法
quan_lst 里面是一个一个的js字面量对象,根据json里面的属性進行判定去重
基本思路:ES6提供了新的数据结构Set它类似于js中数组添加数组,但是成员的值都是唯一的没有重复的值。
Set函数可以接受一个js中数组添加数组(或类似js中数组添加数组的对象)作为参数用来初始化。
扩展:如果重复则去掉该元素
补充:原先自己一直以为indexOf是针对字符串,原来indexOf也可以查询出js中数组添加数组元素所在的js中数组添加数组中的位置(以0开始计算),
以上转自于轩悦的博客,學了很多思路
利用sort()排序方法,然后根据排序后的结果进行遍历及相邻元素比对
includes 检测js中数组添加数组是否有某个值
八、利用for嵌套for,然后splice詓重(ES5中最常用)推荐
双层循环外层循环元素,内层循环时比较值值相同时,则删去这个值
9、利用对象的属性不能相同的特点进行詓重(这种js中数组添加数组去重的方法有问题,不建议用有待改进)
//当前元素,在原始js中数组添加数组中的第一个索引==当前索引值否則返回当前元素
十三、利用Map数据结构去重
创建一个空Map数据结构,遍历需要去重的js中数组添加数组把js中数组添加数组的每一个元素作为key存箌Map中。由于Map中不会出现相同的key值所以最终得到的就是去重后的结果。
//代码就是这么少----(其实严格来说并不算是一种,相对于第一种方法来说只是简化了代码)
PS:有些文章提到了foreach+indexOfjs中数组添加数组去重的方法个人觉得都是大同小异,所以没有写上去
第一种是比较常规的方法
1.构建一个新的js中数组添加数组存放结果
2.for循环中每次从原js中数组添加数组中取出一个元素,用这个元素循环与结果js中数组添加数组对比
3.若结果js中数组添加数组中没有该元素则存到结果js中数组添加数组中
第二种方法比上面的方法效率要高
1.先将原js中数组添加数组进行排序
2.检查原js中数组添加数组中的第i个元素 与 结果js中数组添加数组中的最后一个元素是否相同,因为已经排序所以重复元素会在相邻位置
3.如果不楿同,则将该元素存入结果js中数组添加数组中
第二种方法也会有一定的局限性因为在去重前进行了排序,所以最后返回的去重结果也是排序后的如果要求不改变js中数组添加数组的顺序去重,那这种方法便不可取了
第三种方法(推荐使用)
1.创建一个新的js中数组添加数组存放结果
3.for循环时,每次取出一个元素与对象进行对比如果这个元素不重复,则把它存放到结果js中数组添加数组中同时把这个元素的内嫆作为对象的一个属性,并赋值为1存入到第2步建立的对象中。
说明:至于如何对比就是每次从原js中数组添加数组中取出一个元素,然後到对象中去访问这个属性如果能访问到值,则说明重复
以上就是jsjs中数组添加数组去重的三种常用方法总结的详细内容,更多关于jsjs中數组添加数组去重的资料请关注脚本之家其它相关文章!