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
这里边推荐的第三种方法。
最新文章
- Cause: org.apache.ibatis.builder.BuilderException: Error creating document instance. Cause: org.xm
- XAF应用开发教程(八) 汉化与多国语言支持
- Infinity loop in cursor iteration
- C#接口作用的深入理解
- Android 音乐播放器之--错误状态下调用导致的异常
- GVIM:在WINDOWS下清爽写代码
- [Cycle.js] Fine-grained control over the DOM Source
- JS学习之事件冒泡
- Ajax基础知识(一)
- js音乐播放器
- CentOS 6.5配置mysql
- linux切换g++
- MySQL 性能优化的最佳20多条经验分享(二)(转)
- JS DOM事件学习
- 【Linux入门学习之】vi/vim编辑器必知必会
- sequelize的mssql配置
- Eclipse中将web项目自动发布到Tomcat webapps下(转)
- openssl - X509证书操作函数
- CRM 权限内可查看的记录数
- 8Manage PMP 项目管理工具
热门文章
- 身份证运算符 is 和 is not(检查两个数据在内存当中是否是同一个值) | 逻辑运算符 and or not | 数据类型的判断 isinstance
- Centos7下安装Docker(详细的新手装逼教程)
- 取数游戏II
- [转]有return的情况下try catch finally的执行顺序
- CentOS 7 之 Systemd 入门教程:实战篇
- eclipse添加spring boot 插件
- HTTPS(SSL / TLS)免费证书申请及网站证书部署实战总结
- sqlserver 空 处理
- win的使用
- php 把一个数组分成几个数组