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. TYVJ1415 差分约束

    思路: i–>i+1连一条边权为0的边 i–>i-1连一条边权为-1的边 start-1 ->end 连一条边权为w的边 求0->n的最长路即可 //By SiriusRen ...

  2. quartz.net定时任务框架详解

    C#做定时任务:一是Timer:而是Quartz.net:本文就学习一下Quartz.net框架 Quartz.net非常的灵活,开发人员能用很少的代码就能完成“每隔一小时执行”.“每天2点执行”.“ ...

  3. 004.ES2015和ES2016新特性--块级作用域变量

    其基本原理就是JavaScript的作用域链,下面以对比的方式来展示一下函数级作用域和块级作用域. 函数级作用域 var fns = []; for (var i = 0; i < 5 ; i+ ...

  4. 大数相乘(牛客网ac通过)

    2019-05-172019-05-17 大数相乘基本思想: 相乘相加,只不过大于10先不进位到计算完后统一进位 #include <iostream> #include <stri ...

  5. XML文件基础,DTD校验文件编写,Schema文件的简单使用

    dtd <!-- <!ELEMENT 元素(子元素,...)> --> <!ELEMENT students (student+,cat*) > <!ELEM ...

  6. Site Isolation Design Document

    This design document covers technical information about how Site Isolation is built.  For a general ...

  7. 使用了未经检查或不安全的操作。有关详细信息, 请使用 -Xlint:unchecked 重新编译。

    警告信息如下:

  8. ajax同时提交表单且包含文件

    说明一下:FormData对象是html5的一个对象,目前的一些主流的浏览器都已经兼容.ie8暂时不支持,不支持FormData的,可以使用方法二,下面会介绍.接着说FormData,它是一个html ...

  9. NOIp2018模拟赛四十三

    有了昨天的经验,不慌,开题先看source ******** 再看看题,看到C题标题: ******** 有毒... B题的“显然”50分结论推了我一个小时,然后就弃疗了... 成绩:0+50+5=5 ...

  10. 紫书 习题 11-12 UVa 1665 (并查集维护联通分量)

    这道题要逆向思维 反过来从大到小枚举, 就是在矩阵中一点一点加进去数字,这样比较 好操作, 如果正着做就要一点一点删除数字, 不好做. 我们需要在这个过程中维护联通块的个数, 这里用到了并查集. 首先 ...