前两天写了一篇去重的方法,虽然都是自己公众号的老文章,但觉得总有需要的人,想在网络的浩瀚海洋中找到自己需要的东西,当然是非常高兴。有时间,有机会把自己知道的拿出来分享,觉得有需要的自然会有所得,即使被说成“电话拨号”也无所谓。

言归正传,数组去重我分成三个部分ES3、ES5、ES6,本篇介绍ES3中的一个方法。

先创建一个老数组,接着,同样是拿一个空盘子来。空盘子了,什么都不放。

var arr = ['周一', '周二', '周三', '周二', '周一'];
var newAarry = [];

接下来还是循环的看,这次和昨天的不同,昨天的是看老数组和新数组的相同元素,今天是只看老数组,前面一项和紧挨着它的后面一项是不是重复。那么看两项还是双层for循环,不一样的是,内层循环的初始值,是外层循环的i+1。为什么是+1,下一项的索引当然是+1啦!

for (var i = 0; i < arr.length; i++) {for (var j = i + 1; j < arr.length; j++){    }
}

现在循环了,人后怎么办呢?这时候我们有两个值,一个是arr[i]一个是arr[j],它们的关系是每一个值和它后面元素的关系。那么如果它们两个值一样的话说明了,有重复。

所以这时候需要一个判断,判断正在比较的这两个值是不是一样的。于是还是if语句。

for (var i = 0; i < arr.length; i++) {for (var j = i + 1; j < arr.length; j++){    if (arr[i] === arr[j]) {//一样就在这里操作}}//不一样就给新数组pushnewAarry.push(arr[i]);
}

难点不在给新数组push,而在判断内的操作。如果发现相同了:

1.我需要“放过”这次循环,不做任何操作,尤其是不push

2.此时,循环还在内层于是我将外层的i直接变成下一次,也就是++的操作

var a = 1;
var b = ++a;
var b = a++;

在这里举例,++a 和a++是不一样的。++a是先给a+1之后赋值给b,而a++则是先给b赋值a,然后a再++。

for (var i = 0; i < arr.length; i++) {for (var j = i + 1; j < arr.length; j++){    if (arr[i] === arr[j]) {++i;//改了这里}}newAarry.push(arr[i]);
}

所以如果发现相等,我马上进行“放过”操作,也就是++i。可是我们都知道,这个时候还在内层循环中。内层for循环的j还在按部就班的运行着,突然,i就变了,那么i+1也就跟着变了,j运行到更新操作j++的时候一下就会多跳过一个元素没比。

那么我再把j拉回来既可以了,可我没办法改变for循环中j++的更新语句。可我能改变j的值呀!j=i 这时j的值就变的和i一样了,这时候还在内层for循环中的倒数第二步,当我进行完这步之后,马上就要j++了,就相当于拉回两步近一步,最后j还是会和i错后一位的。

for (var i = 0; i < arr.length; i++) {for (var j = i + 1; j < arr.length; j++){    if (arr[i] === arr[j]) {++i;j=i;//j=++i;可以简写}}newAarry.push(arr[i]);
}

上张思路图,请忽略字体的凌乱,其实字我是可以好好写的。

那么也希望大家能关注我我都公众号web-jianma,手机浏览随时随地~

数组去重方法集锦(一)相关推荐

  1. JS数组去重方法记录

    js数组去重方法 1.遍历数组,建立新数组,利用indexOf判断是否存在于新数组中,不存在则push到新数组,最后返回新数组 代码如下(示 例): function getArray(ar) {va ...

  2. JS数组去重方法小结

    JS数组去重 看了网上很多数组去重方法,用的比较常见的大概就几种,今天想自己来做一个总结. 部分内容参考该博客 1 . 在原数组上操作(基本方法) 思路:利用循环嵌套,判断数组中每个元素与其后面的元素 ...

  3. JAVA数组去重方法

    记录JAVA中数组去重方法 1利用Set的特性去重复 Set set = new HasSet();for (int x=0 ; x<arr.length ; x++){set.add(arr[ ...

  4. javascript数组去重方法性能测试比较

    昨天参加的一个前端面试,其中有一题数组去重,首先想到的是对象存键值的方法,代码如下 方法一:(简单存键值) Array.prototype.distinct1 = function() {var i= ...

  5. javascript数组去重方法汇总

    前言 数组去重已经是一个老生常谈的问题了,依然经久不息,经过岁月的变迁es标准的升级迭代,似乎有越来越多的方法和方式供我们使用,那么那种方式才是最优的?那种才是最简洁的?这个我们一起来探讨. 省略:传 ...

  6. js数组如何按照固定的下标去重_js数组去重方法总结

    假设我们有数组arr,并且声明新数组hash用来存放去重后的元素: var arr = [23,44,5,2,23,5,1,7,8,7]; //包含重复元素 var hash= []; //声明新数组 ...

  7. JS常见的几种数组去重方法

    总结一下JS中用到的数组去重的方法  方法一: 该方法利用对象的属性值不能相同: function arrDelLikeElement (array) {const result = [];const ...

  8. js数组去重方法分析与总结

    数组去重经常被人拿来说事,虽然在工作中不常用,但他能够很好的考察js基础知识掌握的深度和广度,下面从js的不同阶段总结一下去重的方法. ES3阶段 该阶段主要通过循环遍历数组从而达到去重的目的 多次循 ...

  9. Javascript数组去重方法

    目录 什么是数组去重? 1.利用sort排序去重 2.利用indexOf去重 3.new Set 什么是数组去重? 把重复多余的元素剔除掉,我们常利用以下方法去重,方法很多,随便列举两种 1.利用so ...

最新文章

  1. sound.js # pixi辅助插件 — 中文翻译教程
  2. Expo 快速开启之旅
  3. 程序猿修仙之路--算法之直接插入排序
  4. 计算机视觉与图像处理、模式识别、机器学习学科之间的关系
  5. 环形缓冲区ringbuffer
  6. 基于动态提前退出的预训练模型推理加速简介
  7. 全连接条件随机场_CRF条件随机场
  8. WordPress博客系统的安全
  9. [js] 举例说明面向对象编程有什么缺点?
  10. 永远不要去依赖别人_心理学:永远不要穿别人剩下的旧衣服,这三点原因读来让人愧疚...
  11. vue 如何处理两个组件异步问题_Vue异步组件使用详解
  12. sklearn报错DeprecationWarning: the imp module is deprecated in favour of importlib
  13. 软件设计师学习3——操作系统知识1
  14. Delphi10.4.2关于Android设备调试
  15. python导入第三方库失败_史上最详细 Python第三方库添加方法 and 错误解决方法
  16. win10关机后cpu风扇还在转_win10系统关机后风扇还转的解决方法
  17. 51ditu Maps API 类参考文档
  18. halo_回顾:Halo 3与糖尿病抗争
  19. 【ESP 保姆级教程】疯狂传感器篇 —— 案例:Mega + ESP8266 + MQ2烟雾传感器 + MQ3酒精传感器 + MQ7一氧化碳传感器 + OLED +巴法云平台
  20. VMware 虚拟机怎么识别不了ISO文件

热门文章

  1. 永磁同步电机(PMSM)的转子结构剖析
  2. 读书笔记 - 学会写作: 五个吸引人的情节套路
  3. 氪见激光雷达性能参数介绍
  4. PCIe Switch
  5. android+饭否+开源,饭否Android客户端推荐:有饭
  6. 防止iOS中私有属性在block中的循环引用
  7. Oracle表的管理命令
  8. 手机号加密成7位“随机字符串”
  9. Rust: Keywords
  10. 计算机网络知识全面讲解:Internet中常见的应用协议