js数组和数组去重的几种简单的方法
http://blog.csdn.net/liangklfang/article/details/49300417
1.证明一个对象是数组的方法。
方法(1)
[].constructor === Array
true
[].constructor === 'Array'
false
方法(2)
Object.prototype.toString.call([]) == "[object Array]"
以下数js数组去重。==========================================================
先看博客:http://www.itnose.net/detail/6392462.html
这里有一个hash的方法:http://www.itnose.net/detail/6431264.html
第一种遍历方法:
a.是检测新数组newArr里有没有包含Arr里的i项,如果没有则向newArr里添加Aii[i]项,如果有则跳过;不做任何操作。
var Arr = [0,0,1,1,2,2,3,3,4,4,5,5,6,7,8,9];
function unArray (Arr) {
var newArr = [];
for (var i = 0; i < Arr.length; i++) {
if (newArr.indexOf(Arr[i]) == -1){//检测newArr数组里是否包含Arr数组的内容,==-1检索的字符串没有出现则为-1
newArr.push(Arr[i])//把Arr数组的第i项插入新数组
}
};
return newArr;
}
unArray(Arr);
//console.log(unArray(Arr));
b.是在Arr数组里检测,Arr.indexOf(Arr[i])返回某一项在Arr数组里第一次出现的位置,如果第一次出现就push到newArr数组去,如果第二次出现,则什么都不操作。
var Arr = [0,0,1,1,2,2,3,3,4,4,5,5,6,7,8,9];
function unArray (Arr) {
var newArr = [Arr[0]];
for (var i = 1; i < Arr.length; i++) {
if (Arr.indexOf(Arr[i]) == i){//检测Arr数组第一次出现的位置是i
newArr.push(Arr[i])//把Arr数组的第i项插入新数组newArr
}
};
return newArr;//返回新数组newArr
}
unArray(Arr);
//console.log(unArray(Arr));
第二种方法:
排序后相邻去除法(这种排序有序局,有些不是数字的数组是无法进行排序的。)
思路:先将数组经过sort排序,这时候相同的元素处于相邻的位置,所以在便利数组的时候我们只将与前一值不重复的值
function unique(array){
var reArr=[array[0]];
var len=array.length;
array.sort();
for(var i=1;i<len;i++){
if(array[i]!=reArr[reArr.length-1]){//注意这里
reArr.push(array[i]);
}
}
return reArr;
}
第三种方法:
对象键值对法
思路:新建一js对象json以及新数组reArr,遍历数组元素是否为json的键,不是则创建,是则判断元素的类型在键对应的值中是否存在。
function unique(array){
var json = {}, reArr = [], len = array.length, val, type;
for (var i = 0; i < len ; i++) {
val = array[i];
type = Object.prototype.toString.call(val);
if (!json[val]) {//如果键对应的值不存在则是第一次存取
json[val] = [type];//设置该键为数组,并赋值元素类型
reArr.push(val);//往reArr中添加元素
} else if (json[val].indexOf(type) < 0) {
json[val].push(type);
reArr.push(val);
}
}
return reArr;
}
//该方法有bug,当有多个{}时,只能保存一个{}
第四种方法:
个人感觉第三种没有什么鸟用。
Array.from(new Set([3,2,20,45,12,20]))
第五种方法:
[...new Set([3,2,20,45,12,20])]
我认为这是属于去重的最简单的一种方式了。
=============
Js类数组转数组的方法。
http://www.jianshu.com/p/f8466e83cef0
Array.prototype.slice.call(arrayLike)
这里有一篇博客:
这里的话,我们必须先http://www.jb51.net/article/46154.htm
这里边推荐的第三种方法。
js数组和数组去重的几种简单的方法的更多相关文章
- js跨域请求数据的3种常用的方法
由于js同源策略的影响,当在某一域名下请求其他域名,或者同一域名,不同端口下的url时,就会变成不被允许的跨域请求.那这个时候通常怎么解决呢,对此菜鸟光头我稍作了整理:1.JavaScript 在 ...
- 两种简单的方法Docker构建LANMP
在初步入门学习Docker的过程中一步步了解了Docker容器在团队开发中所起到的作用,一边学习一边操作基本命令,当然到现在还处于一个擦边的入门阶段. 尝试一下用Docker构建一个集成开发环境. S ...
- C语言复制文件的两种简单的方法【从根本解决问题】
网上的方法大致有这样几种: 1.使用操作系统提供的复制文件的API 2.使用C语言本身提供的复制文件的函数 3.直接读写文件,从文件角度来操作,从而直接将一个文件复制 这里我们使用的就是这第三种. 复 ...
- elasticsearch安装与使用(1)-- centos7 elasticsearch的两种简单安装方法
转自:http://www.cnblogs.com/miao-zp/p/6003160.html 简单修改 前言 elasticsearch(下面称为ES)是一个基于Lucene的搜索服务器(By 百 ...
- 导入数据到mysql的一种简单的方法
由于ubuntu默认自带的mysql版本号为5.5,并不能使用load data infile这样的高级的功能,因此我们写了一个通用的脚本来上传文件 shell脚本 cat ./employee.cs ...
- JS nodeList转数组,兼容IE低版本
一.前言 nodeList转数组貌似很少会这样去操作,但我在做图片懒加载时,我获取了所有需要做懒加载的img元素,也就是一个NodeList对象,打个比方: 对这些元素进行src修改后,我想将此项从N ...
- php 数组元素快速去重
1.使用array_unique方法进行去重 对数组元素进行去重,我们一般会使用array_unique方法,使用这个方法可以把数组中的元素去重. <?php $arr = array(,,,, ...
- Honeywords项目——检查密码是否被破解的一种简单方法
Honeywords项目使用一种简单的方法来改进hash后的密码的安全性——为每个账户维护一个额外的honeywords(假密码).如果有黑客拿到了密码的文件,然后试图用brute froce的方式破 ...
- js中数组去重的几种方法
js中数组去重的几种方法 1.遍历数组,一一比较,比较到相同的就删除后面的 function unique(arr){ ...
随机推荐
- Redis应用场景说明与部署
Redis简介 REmote DIctionary Server(Redis)是一个基于key-value键值对的持久化数据库存储系统.redis和大名鼎鼎的memcached缓存服务很像,但是red ...
- 关于 spring MVC 配置自动扫描中 use-default-filters 属性
1.springMVC 设置扫描 Bean 的两种常见写法 1.1.先看第一种常见的配置:默认 <!-- 配置Controller扫描 --> <context:component- ...
- 小程序map组件默认层级最高,并且不能设置的解决方案
map组件默认在最上面,若要设置像ofo那样的按钮有两个方法,一是用控件设置,控件就是controls属性,控件只能显示图片,不能显示文字之类的.二是用cover-view组件,这个组件就是悬浮在一些 ...
- python中Hadamard product和matrix product的区分
先简单说一下Hadamard product: (参照维基百科:https://en.wikipedia.org/wiki/Hadamard_product_(matrices)) 而matrix ...
- python中列表中元素的增删改查
增: append : 默认添加到列表的最后一个位置 insert : 可以通过下标添加到列表的任意位置 extend: a.extend[b] --将b列表的元素全加入到列表b中 删; remove ...
- MD5在线加密的应用
MD5是message-digest algorithm 5(信息-摘要算法)的缩写.被广泛用于加密和解密技术上,是文件的“数字指纹”.可以对用户的密码进行加密操作,是不可逆的,所以用户输入的密码经过 ...
- ATM目录结构
作者:高江平版本:1.0程序介绍: 实现ATM常用功能程序结构:atm实现|——README|——atm #ATM主程序目录| |——bin #ATM执行文件目录| | |——__init__.py| ...
- delphi “div”、“mod”、“\”除法运算符的区别与使用方法(附带FORMAT使用方法)
Delphi中和除法相关的算术运算符有: div.mod和符号“\” 下面分别对他们的作用.操作数类型和返回值类型进行一下介绍: div:对2个整数进行除,取商,操作数需是integer类型,返回值也 ...
- Gradle引人注目的特性集
Gradle是一个基于Apache Ant和Apache Maven概念的项目自动化建构工具.它使用一种基于Groovy的特定领域语言来声明项目设置,而不是传统的XML.当前其支持的语言限于Java. ...
- The Code analysis of the FFDNet model
1. 读取图像并判断是否为灰度图,如为RGB图转化为灰度图,并读取图像的w.h 2.数据格式转换:将uint8表示的读取图像矩阵变为double表示. 3.加入噪声,如果噪声水平$\sigma = 5 ...