zoukankan      html  css  js  c++  java
  • 数组去重

    >第一种不会改变原数组
    var ary = [5, 5, 9, 3, 5, 5, 5, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 5, 4, 7, 9];
            for(var i=0 , newary=[] , a=""; i<ary.length; i++){
                if(newary.includes(ary[i])){
                    continue;
                }else{
                newary.push(ary[i]);
                }
            };
            console.log(newary); //[5, 9, 3, 2, 4, 7]
    
    第一种改进成为箭头函数方法
    var ary = [5, 5, 9, 3, 5, 5, 5, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 5, 4, 7, 9];
            var newary=[]
            ary.forEach(item =>{
                if(newary.includes(item)){
                    return;
                }else{
                newary.push(item);
                }
            });
            console.log(newary); //[5, 9, 3, 2, 4, 7]
    >第二种方法会改变原数组
    var arr = [5, 5, 5, 5, 5, 5, 5, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 5, 4, 7, 9];
            for (var i = 0; i < arr.length; i++) {
                for (var j = i + 1; j < arr.length; j++) {
                    if (arr[i] == arr[j]) {
                        arr.splice(j, 1);
                        j--;
                        continue;
                    }
                }
            }
            console.log(arr); //[5, 2, 4, 7, 9]
    
    第三中基于正则方法去重
    let ary = [5, 5, 9, 3, 5, 5, 5, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 5, 4, 7, 9]; ary.sort((a,b)=>a-b); let str = ary.join("@")+"@"; let reg = /(d+@)1*/g; ary = []; str.replace(reg,(n,m)=>{ m=Number(m.slice(0,m.length - 1)); ary.push(m); }); console.log(ary);
    基于ES6的set(对应的Map)
            let ary = [5, 5, 9, 3, 5, 5, 5, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 5, 4, 7, 9];        
            ary = [...new Set(ary)];
            console.log(ary);

     Set对象是值的集合,你可以按照插入的顺序迭代它的元素。

    Set中的元素只会出现一次,即 Set 中的元素是唯一的,一种有效去重方式.

    const set1 = new Set([1, 2, 3, 4, 5]); console.log(set1.has(1)); Set.prototype.add(value)在Set对象尾部添加一个元素。返回该Set对象。

    Set.prototype.clear()移除Set对象内的所有元素。

    Set.prototype.delete(value)移除Set的中与这个值相等的元素,返回Set.prototype.has(value)在这个操作前会返回的值(即如果该元素存在,返回true,否则返回false)。

    Set.prototype.has(value)在此后会返回false。

    Set.prototype.entries()返回一个新的迭代器对象,该对象包含Set对象中的按插入顺序排列的所有元素的值的[value, value]数组。为了使这个方法和Map对象保持相似, 每个值的键和值相等。

    Set.prototype.forEach(callbackFn[, thisArg])按照插入顺序,为Set对象中的每一个值调用一次callBackFn。如果提供了thisArg参数,回调中的this会是这个参数。

    Set.prototype.has(value)返回一个布尔值,表示该值在Set中存在与否。

    Set.prototype.keys()与values()方法相同,返回一个新的迭代器对象,该对象包含Set对象中的按插入顺序排列的所有元素的值。

    Set.prototype.values()返回一个新的迭代器对象,该对象包含Set对象中的按插入顺序排列的所有元素的值。

    Set.prototype[@@iterator]()返回一个新的迭代器对象,该对象包含Set对象中的按插入顺序排列的所有元素的值。

  • 相关阅读:
    LOGO生成器
    【转】 iOS开发:Debug与Release版本NSLog屏蔽方法
    【转】IOS调试技巧:当程序崩溃的时候怎么办 iphone IOS
    【转】 Objective C实现多继承
    NSArray
    记一次 ios程序 内存优化记录LOG日志
    【转】[iOS] 关于 self = [super init];
    NSMutableArray
    Xcode调试利器 Instruments用户指南
    一段代码展现一个流程,流程在代码中内聚
  • 原文地址:https://www.cnblogs.com/niuyaomin/p/12530658.html
Copyright © 2011-2022 走看看