【学习笔记30】JavaScript中数组的5种去重方法
创始人
2024-02-15 11:23:05

js去重方法

    • 1、Set去重
    • 2、indexOf / lastIndexOf
      • 2.1方法一
      • 2.2方法二
    • 3、sort排序
    • 4、filter过滤去重
    • 5、双重for循环完成数组去重

1、Set去重

  • 数组中默认是可以存储重复数据
  • 实际项目中,数组中不能存储重复数据,需要去除数组中重复的数据
  • 实际项目中,推荐使用使用set数据类型方法
        var arr = [1,2,3,1,2,3,4,1,2,3,4,5,1,2,3,4,5,6,1,2,3,4,5,6,7];console.log( arr );
​// 实际项目中 使用的数组去重代码var newArr = [...new Set(arr)];console.log( newArr );

2、indexOf / lastIndexOf

  1. 创建一个新的空数组
  2. 将原始数组数据写入新数组中,写入时执行判断
  3. 要写入的数据新数组中没有,再执行写入操作

2.1方法一

        var arr = [1,2,3,1,2,3,4,1,2,3,4,5,1,2,3,4,5,6,1,2,3,4,5,6,7];
​// 创建一个空数组 存储数据var newArr = [];
​for (var i = 0; i <= arr.length - 1; i++) {// console.log( i, arr[i] );
​// 当查询结果是-1时 将值写入新数组newArrif (newArr.indexOf(arr[i]) === -1) {// 如果查询结果是-1 证明新数组中没有要写入的数据 arr[i] // 执行末位新增数据操作newArr.push(arr[i]);}}console.log(newArr);         
        var arr = [1,2,3,1,2,3,4,1,2,3,4,5,1,2,3,4,5,6,1,2,3,4,5,6,7];
​// 创建一个空数组 存储数据var newArr = [] ;
​// forEach循环arr.forEach( function(item){
​// item存储的是原始数组中数据单元存储的数据数值// console.log( item );
​// 判断原始数组数据item 不在新数组中 执行写入操作if( newArr.indexOf( item ) === -1 ) newArr.push( item );})console.log( newArr );

2.2方法二

    var arr = [1, 1, 2, 2, 3, 3, 4, 5, 6, 7, 7, 7, 7];for( var i = 0 ; i < arr.length; i++){if(arr.indexOf(arr[i], i+1) !== -1){arr.splice(i, 1)i--;}}console.log(arr);

3、sort排序

  1. 将数组使用sort( )方法进行排序,排序后相同的数值会相邻排序
  2. 循环遍历数组:如果当前单元存储的数值和下一个单元存储的数值相同,删除数组的下一个单元
        // 原始数组var arr = [1,2,3,1,2,3,4,1,2,3,4,5,1,2,3,4,5,6,1,2,3,4,5,6,7]; 
​// 利用sort对原始数组进行排序arr.sort( function(a , b){ return a-b });
​// 使用for循环遍历数组for( var i = 0 ; i < arr.length ; i++ ){
​// 当前单元和下一个单元相同时if( arr[i] === arr[i+1] ){
​// 从下一个单元i+1开始 删除 1 个arr.splice( i+1 , 1 );
​// 消除数组坍塌的影响
​i--;}}console.log( arr );

4、filter过滤去重

  1. 将数组中数据单元存储数据是第一次出现的数据
  2. 通过filter过滤,写入到新数组中
  3. 数组.indexOf( 数据 ) ,执行结果返回值是输入的数据,第一次出现位置的索引下标
        var arr = [ 1,2,3,1,2,3,4,1,2,3,4,5,1,2,3,4,5,6,1,2,3,4,5,6,7 ]; 
​// 通过filter过滤函数完成操作var newArr = arr.filter( function(item , index){/* 通过arr.indexOf(item)查询当前item数值,第一次出现位置的索引下标如果当前单元的索引下标index和 查询的第一次出现位置的索引下标 相同 item 就是第一次出现的数据 通过return返回到新数组中*/
​var res = arr.indexOf( item );console.log( ` 当前数据是${item},索引下标是${index},数值第一次出现的索引下标是${res}` );return arr.indexOf( item ) === index ;})
​console.log( newArr );

5、双重for循环完成数组去重

        var arr = [ 1,2,3,1,2,3,4,1,2,3,4,5,1,2,3,4,5,6,1,2,3,4,5,6,7 ]; 
​// 外层是第一个至倒数第二个单元for( var i = 0 ; i <= arr.length-1-1 ; i++ ){
​// 内层是外层起始的下一个至最后一个for( var j = i+1 ; j <= arr.length-1 ; j++ ){
​// 如果两个数值arr[i]和arr[j]相同 // 删除内层循环对应的单元,即j索引下标对应的单元if( arr[i] === arr[j] ){// 从内层索引下标j对应的数值单元开始删除1个单元arr.splice( j , 1 );
​// 删除数组坍塌影响j-- ;}}}
​console.log( arr );

相关内容

热门资讯

埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...