博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
数组去重
阅读量:5341 次
发布时间:2019-06-15

本文共 1874 字,大约阅读时间需要 6 分钟。

主推最简方法(使用removeRepeat方法)如下:

1.ES5中写法:

function removeRepeat (arr) {
     var newArr = [];
     for (var i=0; i<arr.length; i++) {
            if ( newArr.indexOf(arr[i])==-1 ) {
                  newArr.push( arr[i] )
            }
     }
     return newArr;
}
var a = removeRepeat( [1, 3, 1, 4] );
console.log(a);

 

2.ES6中写法:

function removeRepeat (arr) {
      return Array.from( new Set(arr) );
}
var b = removeRepeat([1, 3, 3, 5, 5, 6, 6]);
console.log(b);

 

其他方法如下:----------------------------------------------------------------------------

一:用双层for循环+push

(双层循环,外层循环元素,内层循环时比较值;如果有相同的值则跳过,不相同则push进数组)

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;
}
var arra = [1, 2, 3, 4, 4,  2, 1, 1];
arra.distinct();
console.log(arra.distinct());   //返回[3,4,2,1]

 

二:利用splice直接在原数组进行操作

(外层循环元素,内层循环时比较值; 值相同时,则删去这个值)

 

Array.prototype.distinct = function() {

    var arr = this,
                    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, 5, 3, 2, 4, 4, 1, 2, 1, 1, 1, ];
var b = a.distinct();
console.log(b.toString()); //1,5,3,2,4

 

三:利用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;
};
var a = [ 1, 1, 2, 2, 3, 3, 2, 1];
var b = a.distinct();
console.log(b.toString()); //3,2,1

 

四:利用ES6的set

function dedupe(array) {

       return Array.from(new Set(array));
}
dedupe([1, 1, 2, 3]) 
let arr = [1, 2, 3, 3];
let resultarr = [...new Set(arr)];   //拓展运算符(...)内部使用for...of循环
console.log(resultarr); //[1,2,3]

 

转载于:https://www.cnblogs.com/xuanranit/p/8455841.html

你可能感兴趣的文章
【GOF23设计模式】--单例模式
查看>>
OpenStack Q版本新功能以及各核心组件功能对比
查看>>
MySQL 基础语法结构
查看>>
单反不穷三代的方法
查看>>
TH文字编辑器开发的第一个游戏,唐伯虎泡妞
查看>>
【Muduo库】【base】基本类
查看>>
redis-数据结构以及使用场景分析
查看>>
SDN第二次作业
查看>>
ASP.NET MVC之如何看待内置配置来提高性能优化(四)
查看>>
前端页面
查看>>
2019-06-19 滴滴打车一面
查看>>
SQL SERVER 简体与繁体 定序 轉換
查看>>
在Ubuntu上为Android系统内置C可执行程序测试Linux内核驱动程序
查看>>
使用 Eclipse Memory Analyzer 进行堆转储文件分析
查看>>
开源操作系统读《移动互联网白皮书》有感
查看>>
[bxd学习java基本点]10.set元素不重复,取元素顺序会变的。TreeSet取值时,是安顺序来的。...
查看>>
数据库订正脚本性能优化两则:去除不必要的查询和批量插入SQL
查看>>
android 完全退出实现
查看>>
寻找最水之王
查看>>
18二叉树的镜像
查看>>