• js中常见的去重方式


    /*
    * 几种常用的去重的方式
    */
    
    var arr = [2, 6, 1, 15, 11, 7, 12, 8, 5, 4, 3, 12, 10, 1, 7, 2, 4, 4, '4', 12, false, false, 3, '3'];
    
    // 去重方法1 : 先将数组排序,然后循环数组,判断当前元素与上一个是否相当,只针对number
    
    var unique1 = function(arr) {
    
    var removeArr = [];
    arr = arr.sort((function(a, b){ return a - b;}));
    for (var i=1; i<arr.length;i++) {
    if (arr[i] === arr[i-1] ) {
    arr.splice(i--,1);
    }
    }
    return arr;
    };
    
    // 去重方法2:排序后,利用新数组内.push的元素比较2个值是否相等。只针对number
    
    var unique2 = function(arr) {
    arr = arr.sort(function(a, b){return a - b;});
    var result = [arr[0]],
    len = arr.length,
    i;
    
    // 每次与新增到result中的值对比
    for(i = 1; i < len; i++) {
    if(arr[i] !== result[result.length - 1]) {
    result.push(arr[i]);
    }
    }
    
    return result;
    
    };
    
    // 去重方法3:利用对象中是否有一样的属性进行比较。可区分string和number
    
    var unique3 = function(arr) {
    var result = [], 
    o = {},
    len = arr.length,
    i;
    
    for(i = 0; i < len; i++) {
    if(!o[arr[i]]) {
    result.push(arr[i]);
    o[arr[i]] = true;
    }
    }
    
    return result;
    };
    
    // 去重方法4:类似于插入排序~不过是从前向后找。只针对number类型
    var unique4 = function(arr) {
    var i, j;
    
    for(i = 0; i < arr.length; i++) {
    j = i + 1; // 相邻比较
    while(j < arr.length){
    if(arr[i] === arr[j]) {
    arr.splice(j, 1);
    j--; // 删除后,当前索引值则会是自动补进下一位元素,因此要--,否则会跳过自动补进的元素
    }
    j++; // 向后查找
    }
    } 
    return arr.sort(function(a,b){return a - b;});
    };
    
    // 去重方法5:跳出循环 向后查找比较当前i的值
    var unique5 = function(arr) {
    var result = [], len = arr.length, i, j;
    for(i = 0; i < len; i++) {
    for(j = i + 1; j < len; j++) {
    if(arr[i] === arr[j]) { // 如果有相同的j重新赋值false并跳出loop
    j = false;
    break;
    }
    }
    if(j) { // j为false时,当前i的值不计入新数组内,直到是唯一的才会被push进去。
    result.push(arr[i]);
    }
    }
    
    return result.sort(function(a, b){return a - b;});
    };
    
    // 去重方法6:向后查找,如果值相等,则跳出本次循环,进行下次循环
    var unique6 = function(arr) {
    var result = [], len = arr.length, i, j;
    for(i = 0; i < len; i++) {
    j = i + 1;
    while(j < len){
    if(arr[i] === arr[j]){
    j = ++i; // 跳出本次循环
    }
    j++;
    }
    result.push(arr[i]);
    }
    
    return result.sort(function(a, b){return a - b;});
    };
    
    // console.log(unique1(arr));
    // console.log(unique2(arr));
    // console.log(unique3(arr));
    // console.log(unique4(arr));
    // console.log(unique5(arr));
    console.log(unique6(arr));
  • 相关阅读:
    vue中的具名插槽
    vue中默认插槽slot
    局部组件使用指令-方法-过滤器-计算属性
    vue创建局部组件
    Class Metaprogramming
    Attribute Descriptors
    Dynamic Attributes and Properties
    Concurrency with asyncio
    Concurrency with Futures
    Coroutines
  • 原文地址:https://www.cnblogs.com/silianbo/p/4841889.html
Copyright © 2020-2023  润新知