JS数组去掉重复元素,这里提供3中写法。

var arr =[1,2,3,4,5,6,3,4,7,2,4,1,8];

输出:[1,2,3,4,5,6,7,8];

1.使用indexOf()

arr.indexOf(a,b)这个方法是查找a在arr中首次出现的位置(b这个参数规定了在arr中开始检索的位置,可写可不写,不写的话检索位置为0).

利用这个方法来判断新数组中是否出现过这个元素,如果新数组中没有这个元素,那么把元素添加到新数组中,如果新数组中已经有这个元素了那就不进行操作,遍历之后得到的新数组即为所求。

 <script>
var arr = [1,2,3,4,5,6,3,4,7,2,4,1,8];//原数组
var newArr = [];//定义一个新数组来接收元素 for(var i = 0;i<arr.length;i++){
//判断newArr中是否有arr[i]这个元素,如果返回结果为-1(<0)证明新数组newArr中没有这个元素,则把元素添加到新数组中
if(newArr.indexOf(arr[i])<0){
newArr.push(arr[i]);
}
} console.log(newArr); </script>

2.不添加新数组的比较

将数组中前一个元素与后面剩下的元素依次进行比较,如果发现两个元素相同,则删除后面的元素。

这里会用到arr.splice(index,n);这个方法是删除数组中的某个元素,删除下标为index的元素,删除n位

<script>
var arr = [1,2,3,4,5,6,3,4,7,2,4,1,8];
for(var i = 0;i<arr.length-1;i++){//遍历获取“前一个元素”,最后一个数不用获取,它本身已经被前面所有元素给排除过了
for(var j = i+1;j<arr.length;j++){//遍历获取剩下的元素,“后一个元素”的起始索引就是“前一个元素”的索引+1
if(arr[i] == arr[j]){//如果“前一个元素”与后面剩下的元素之一相同,那么就要删除后面的这个元素
arr.splice(j,1);
j--;//如果删除了这个元素,那么后面的元素索引值就会发生改变,所以这里的j需要-1
}
}
}
console.log(arr);
</script>

3.使用空对象比较

这个方法相对来说比较麻烦,是我前几天学习对象的时候写的方法,主要就是利用对象的属性和属性值来判断这个对象中是否存在这个属性,如果存在这个属性那么就把这个元素在数组中删除当中。

把数组的元素给对象当成属性,对象中没有这个属性,那么就添加这个属性并给属性一个属性值,如果这个对象中有这个属性那么就删除这个数组的元素。

<script>
var obj = {};
for(var i = 0;i<arr.length;i++){
var o = arr[i];//将数组中的元素给对象
if(obj[o] == undefined){//obj[o]取对象中属性为o的属性,如果没有这个属性则会返回undefined
//可以判断obj这个对象中有没有这个属性
obj[o] = 1;
}else{
arr.splice(i,1);
}
}
console.log(arr); </script>

JS数组去掉重复元素的更多相关文章

  1. 高效率去掉js数组中重复项

    Array类型并没有提供去重复的方法,如果要把数组的重复元素干掉,那得自己想办法: function unique(arr) { var result = [], isRepeated; for (v ...

  2. php 去除数组中重复元素

    去除数组中重复元素, 找了下可以一下两个函数 php array_flip()与array_uniqure() $arr = array(…………) ;// 假设有数组包含一万个元素,里面有重复的元素 ...

  3. 统计js数组中奇数元素的个数

    如何统计一个JS数组中奇数元素的个数呢? 这是群友提出的一个问题,大部分群友给出的是遍历 然后对2取模,得到最终结果. 这样的写法是最容易想得到的,那么有没有其他思路呢? 这里我提供另外一种思路,我们 ...

  4. list去掉重复元素

    需求: 有list 里面含有重复元素,要求去掉重复元素: solution 1: >>> a [1, 2, 2, 1, 3, 4, 5, 6, 5] >>> set ...

  5. PHP 二维数组去掉重复值并保持原结构

    PHP 二维数组去掉重复值并保持原结构 直接上代码,解释很详细 //二维数组去掉重复值 function arrunique($a){ foreach($a[0] as $k => $v){ / ...

  6. Go切片去掉重复元素

    1.Go切片去掉重复元素 如果传入的是string类型: //slice去重 func removeRepByMap(slc []string) []string { result := []stri ...

  7. 在angular中使用ng-repeat时数组中有重复元素,要用item in items track by $index

    在angular中使用ng-repeat时数组中有重复元素,要用item in items track by $index,不然会报错 <div class="" ng-in ...

  8. JS如何去掉一个数组的重复元素 (数组去重)

    一.思路如下: 定义一个新数组,将老数组遍历一遍,再进行判断,如果新数组里面没有老数组的元素就添加,否则就不添加,最终输出整个新数组. 二.代码如下: var arr = ["a" ...

  9. JS - 给数组的原型添加去掉重复元素的distinct方法

    /* 调用完该方法,原数组只留下非重复的数据 返回一个数组,里面是依次出现的重复元素 */Array.prototype.distinct = function () {    var removeA ...

随机推荐

  1. 前端知识点回顾——mongodb和mongoose模块

    mongodb和mongoose模块 数据库 数据库有关系型数据库(MySQL)和非关系型数据库(mongodb),两者的语法和数据存储形式不一样. mySQL 关系型数据库 类似于表格的形式,每一条 ...

  2. 朴素贝叶斯算法python实现

    朴素贝叶斯是一种十分简单的分类算法,称其朴素是因为其思想基础的简单性,就文本分类而言,他认为词袋中的两两词之间的关系是相互独立的,即一个对象的特征向量中的每个维度都是互相独立的.这是朴素贝叶斯理论的思 ...

  3. java网络通信:异步非阻塞I/O (NIO)

    转: java网络通信:异步非阻塞I/O (NIO) 首先是channel,是一个双向的全双工的通道,可同时读写,而输入输出流都是单工的,要么读要么写.Channel分为两大类,分别是用于网络数据的S ...

  4. 获取当前运行的exe路径

    void GetAppPath(CString& path) { TCHAR str[] = {}; GetModuleFileName(NULL,str,); wchar_t *pszPos ...

  5. Qt编写自定义控件26-平铺背景控件

    一.前言 平铺背景控件,主要的应用场景是作为画布出现,黑白相间的背景图,然后上面可以放置图片图形等,使得看起来更美观,比如PS软件新建图层以后的背景,FireWorks软件新建画布以后的透明背景,IC ...

  6. JAVA 基础编程练习题42 【程序 42 求数字】

    42 [程序 42 求数字] 题目:809*??=800*??+9*??+1 其中??代表的两位数,8*??的结果为两位数,9*??的结果为 3 位数.求??代表的两位数,及 809*??后的结 果. ...

  7. ID3算法(MATLAB)

    ID3算法是一种贪心算法,用来构造决策树.ID3算法起源于概念学习系统(CLS),以信息熵的下降速度为选取测试属性的标准,即在每个节点选取还尚未被用来划分的具有最高信息增益的属性作为划分标准,然后继续 ...

  8. CentOS7.5安装GitLab及汉化

    一.GitLab英文版安装 1.下载gitlab安装包,然后安装 wget --content-disposition https://packages.gitlab.com/gitlab/gitla ...

  9. C\C++中的 struct 关键字详解

    struct关键字是用来定义一个新的类型,这个新类型里面可以包含各种其他类型,称为结构体. 1. 什么是结构体 结构体(struct)是一种自定义的数据类型,就是把一组需要在一起使用的数据元素组合成一 ...

  10. ffmpeg学习笔记-Linux下编译Android动态库

    Android平台要使用ffmpeg就需要编译生成动态库,这里采用Ubuntu编译Android动态库 文件准备 要编译生成Android需要以下文件 NDK ffmpeg源代码 NDK下载 NDK可 ...