这里有新鲜出炉的 Javascript 教程,程序狗速度看过来!
Javascript 是一种由 Netscape 的 LiveScript 发展而来的原型化继承的基于对象的动态类型的区分大小写的客户端脚本语言,主要目的是为了解决服务器端语言,比如 Perl,遗留的速度问题,为客户提供更流畅的浏览效果。
相信大家都知道网上关于 Javascript 中数组去重的方法很多,这篇文章给大家总结 Javascript 中数组各种去重的方法,相信本文对大家学习和使用 Javascript 具有一定的参考借鉴价值,有需要的下面来一起看看。
前言
在做 javascript 开发的时候,经常会遇到数组元素重复的问题,而 javascript Array 又没有直接提供方法解决此问题,还需要自己去实现。这篇文章总结了 Javascript 中数组各种去重的方法,下面来一起看看。
方法一 利用对象属性不重复的特性
- Array.prototype.distinct = function (){
- var arr = this,
- i,
- obj = {},
- result = [],
- len = arr.length;
- for(i = 0; i< arr.length; i++){
- if(!obj[arr[i]]){ //如果能查找到,证明数组元素重复了
- obj[arr[i]] = 1;
- result.push(arr[i]);
- }
- }
- return result;
- };
方法二 双层循环,外层循环元素,内层循环时比较值
- Array.prototype.distinct = function(){
- var arr = this,
- result = [],
- i,
- j,
- len = arr.length;
- for(i = 0; i < len; i++){
- for(j = i + 1; j < len; j++){
- if(arr[i] === arr[j]){
- j = ++i;
- }
- }
- result.push(arr[i]);
- }
- return result;
- }
方法三 数组递归去重
- Array.prototype.distinct = function (){
- var arr = this,
- len = arr.length;
- arr.sort(function(a,b){ //对数组进行排序才能方便比较
- return a - b;
- })
- function loop(index){
- if(index >= 1){
- if(arr[index] === arr[index-1]){
- arr.splice(index,1);
- }
- loop(index - 1); //递归loop函数进行去重
- }
- }
- loop(len-1);
- return arr;
- };
方法四 利用 indexOf 以及 forEach
- Array.prototype.distinct = function (){
- var arr = this,
- result = [],
- len = arr.length;
- arr.forEach(function(v, i ,arr){ //这里利用map,filter方法也可以实现
- var bool = arr.indexOf(v,i+1); //从传入参数的下一个索引值开始寻找是否存在重复
- if(bool === -1){
- result.push(v);
- }
- })
- return result;
- };
方法五 利用 ES6 的 set
- function dedupe(array) {
- return Array.from(new Set(array));
- }
- dedupe([1, 1, 2, 3]) //[1,2,3]
方法六 拓展运算符 (…) 内部使用 for…of 循环
- let arr = [3, 5, 2, 2, 5, 5];
- let unique = [...new Set(arr)]; //[3,5,2]
总结
好了,以上就是这篇文章的全部内容了,个人比较喜欢使用方法一,不会对原数组进行修改,希望这篇文章对大家能有所帮助,如果有疑问大家可以留言交流。
来源: http://www.phperz.com/article/17/0617/331435.html