1. 双层循环:外层循环,内层比较值;

(1)利用splice直接在原数组进行操作

Array.prototype.delRepeat = function (){
var arr = this;
var i,j,len = arr.length;
for(i = 0; i < len; i++){
for(j = i + 1; j < len; j++){
if(arr[i] == arr[j]){
arr.splice(j,1);
len--;
j--;
}
}
}
return arr;
};
var a = [1,2,4,4,5,6,5,3,2,4,9,4,1,2,9,1,1];
console.log(a.delRepeat()); //[1, 2, 4, 5, 6, 3, 9]  

2. 利用对象的属性不能相同的特点进行去重

Array.prototype.delRepeat = function (){
var arr = this;
var i;
var obj = {};
var result = [];
for(i = 0; i< arr.length; i++){
if(!obj[arr[i]]){
obj[arr[i]] = 1;
result.push(arr[i]);
}
}
return result;
};
var a = [1,2,4,4,5,6,5,3,2,4,9,4,1,2,9,1,1];
console.log(a.delRepeat()); //[1, 2, 4, 5, 6, 3, 9]  

3. 利用ES6的set

(1)利用Array.from将Set结构转换成数组

function delRepeat(array){
return Array.from(new Set(array));
}
var a = [1,2,4,4,5,6,5,3,2,4,9,4,1,2,9,1,1];
console.log(a.delRepeat()); //[1, 2, 4, 5, 6, 3, 9]

(2)拓展运算符(...)内部使用for...of循环

let arr = [1,2,4,4,5,6,5,3,2,4,9,4,1,2,9,1,1];
let resultArr = [...new Set(arr)];
console.log(resultArr);

4.借助indexOf()方法,判断此元素在该数组中首次出现的位置下标与循环的下标是否相等

(1)不借助新数组,使用splice();

var ar = [1,2,4,4,5,6,5,3,2,4,9,4,1,2,9,1,1];
function delRepeat(arr){
for (var i = 0; i < arr.length; i++) {
if (arr.indexOf(arr[i]) != i) {
arr.splice(i,1);//删除数组元素后数组长度减1后面的元素前移
i--;//数组下标回退
}
}
return arr;
} console.log( delRepeat(ar)); // [1, 2, 4, 5, 6, 3, 9]

(2)借助新数组;

var ar = [1,2,4,4,5,6,5,3,2,4,9,4,1,2,9,1,1];
function delRepeat(arr) {
var result = [];
for (var i = 0; i < arr.length; i++) {
if (arr.indexOf(arr[i]) == i) {
result.push(arr[i]);
}
}
return result;
} console.log(delRepeat(ar)); // [1, 2, 4, 5, 6, 3, 9]  

(3)借助新数组  判断新数组中是否存在该元素如果不存在则将此元素添加到新数组中

Array.prototype.delRepeat = function(){
var newArr = [];
for(var i = 0; i < this.length; i++){
if(newArr.indexOf(this[i])== -1){
newArr.push(this[i]);
}
}
return newArr;
}
var arr = [1,2,4,4,5,6,5,3,2,4,9,4,1,2,9,1,1];
console.log(arr.delRepeat()); // [1, 2, 4, 5, 6, 3, 9]  

5. 利用数组中的filter方法

var arr = ['a','f','b','p','e','a','o','f'];
var result = arr.filter(function(element,index,self){
return self.indexOf(element) === index;
});
console.log(result); //["a", "f", "b", "p", "e", "o"]

  

  

  

  

  

  

js数组去重问题的更多相关文章

  1. js数组去重的4种方法

    js数组去重,老生长谈,今天对其进行一番归纳,总结出来4种方法 贴入代码前 ,先对浏览器Array对象进行支持indexOf和forEach的polyfill Array.prototype.inde ...

  2. JS 数组去重(数组元素是对象的情况)

    js数组去重有经典的 几种方法 但当数组元素是对象时,就不能简单地比较了,需要以某种方式遍历各值再判断是否已出现. 因为: 1.如果是哈希判断法,对象作哈希表的下标,就会自动转换成字符型类型,从而导致 ...

  3. js数组去重常用方法

    js数组去重是面试中经常会碰到的问题,无论是前端还是node.js数组常见的有两种形式,一种是数组各元素均为基本数据类型,常见的为数组字符串格式,形如['a','b','c'];一种是数组各元素不定, ...

  4. js 数组去重小技巧

    js 数组去重小技巧 Intro 今天遇到一个问题,需要对数据进行去重,想看一下有没有什么比较方便的方法,果然有些收获. Question 问题描述: 我有一个这样的数据: [ { "Pro ...

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

    JS数组去重的几种常见方法 一.简单的去重方法 // 最简单数组去重法 /* * 新建一新数组,遍历传入数组,值不在新数组就push进该新数组中 * IE8以下不支持数组的indexOf方法 * */ ...

  6. js数组去重五种方法

    今天来聊一聊JS数组去重的一些方法,包括一些网上看到的和自己总结的,总共5种方法(ES5). 第一种:遍历数组法 这种方法最简单最直观,也最容易理解,代码如下: var arr = [2, 8, 5, ...

  7. js数组去重的方法(转)

    JS数组去重的几种常见方法 一.简单的去重方法 // 最简单数组去重法 /* * 新建一新数组,遍历传入数组,值不在新数组就push进该新数组中 * IE8以下不支持数组的indexOf方法 * */ ...

  8. js 数组去重方法汇总

    <!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF-8&quo ...

  9. js数组去重 javascript版

    //js数组去重 //思路: // 1.放入第一个元素 // 2.放入第n个元素,和第n个之前的元素就行比较,如果有重复,则跳过.没有重复就加入数组中 // 3.返回新的去重后数组 Array.pro ...

  10. js数组去重(多种方法)

    // js数组去重 Array.prototype.fun1 = function(){ var arr = this, result = [], i, len = arr.length; for(i ...

随机推荐

  1. JavaScript进阶练习

    题目:编写如下页面 当用户点击”统计“按钮时,在窗口中弹出文本框中出现次数最多的字符并显示其出现的次数 点击统计按钮时效果如图所示: 实现代码: <!DOCTYPE html> <h ...

  2. 12:Challenge 5(线段树区间直接修改)

    总时间限制:  10000ms 单个测试点时间限制:  1000ms 内存限制:  262144kB 描述 给一个长为N的数列,有M次操作,每次操作是以下两种之一: (1)将某连续一段同时改成一个数 ...

  3. 贰、js的基础(一)

    1.js的语法 a.区分大小写 b.弱类型变量:变量无特定类型 c.每行结尾的分号可有可无 d.括号用于代码块 e.注释的方法与c语言和java相同 2.变量 注意事项: a.通过关键字var来声明. ...

  4. (六)Redux进阶

    1 UI组件与容器组件的拆分 UI组件(傻瓜组件):只负责页面显示,没有任何逻辑 容器组件(聪明组件):并不去管UI到底长成什么样,关注的是整个业务逻辑 2 无状态组件 一个普通的函数就是无状态组件 ...

  5. harbor 安装过程

    [root@master01 harbor]# ./prepare  Clearing the configuration file: ./common/config/adminserver/env ...

  6. vue-cli#2.0项目结构分析

    项目结构 build 构建工具相关的目录 config 配置目录 dist 通过工具打包生成的最终需要上线的目录 node_modules 存放本地开发所有的依赖包的目录 src 源码目录 stati ...

  7. linux操作---cd

    cd命令用于切换工作路径,格式是cd [选项][参数]: [选项] -p  如果切换的工作目录是一个符号连接,直接切换到符号连接指向的目标目录: -L  如果切换的工作目录是一个符号连接,直接切换到符 ...

  8. const int *a与int *const a,const int *const a的区别

    来源:https://blog.csdn.net/zhangheng837964767/article/details/33783511 关键问题点:const 属于修饰符 ,关键是看const 修饰 ...

  9. Inter-partition communication in multi-core processor

    A multi-core processor includes logical partitions that have respective processor cores, memory area ...

  10. Java里的各种队列

    以下翻译来自java8的官方文档: 1.LinkedBlockingQueue:基于链接节点的可选限定的blocking queue . 这个队列排列元素FIFO(先进先出). 队列的头部是队列中最长 ...