js数组去重/数组排序/计算数组相同元素个数方法

责编:menVScode 2018-01-23 20:20 阅读(687)

        1、数组去重

        (1)利用indexOf()方法

        indexOf() 方法返回在该数组中第一个找到的元素位置,如果它不存在则返回-1,不过 indexOf() 不支持IE8一下的浏览器。

/*
* 新建一新数组,遍历传入数组,值不在新数组就push进该新数组中
* IE8以下不支持数组的indexOf方法
* */
function uniq(array){
    var temp = []; //一个新的临时数组
    for(var i = 0; i < array.length; i++){
        if(temp.indexOf(array[i]) == -1){
            temp.push(array[i]);
        }
    }
    return temp;
}

        (2)递归方式

        splice(index,howmany):从下标为index开始,删除长度为howmany

function uniq(arr){
    var 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;
};

        2、数组排序

        (1)原生js的sort()方法,用于对数组的元素进行排序。

        sort() 方法用于对数组的元素进行排序。语法:arrayObject.sort(sortby),返回值为对数组的引用。请注意,数组在原数组上进行排序,不生成副本。

        如果调用该方法时没有使用参数,将按字母顺序对数组中的元素进行排序,说得更精确点,是按照字符编码的顺序进行排序。要实现这一点,首先应把数组的元素都转换成字符串(如有必要),以便进行比较。

        如果想按照其他标准进行排序,就需要提供比较函数,该函数要比较两个值,然后返回一个用于说明这两个值的相对顺序的数字。比较函数应该具有两个参数 a 和 b,其返回值如下:

        若 a 小于 b,在排序后的数组中 a 应该出现在 b 之前,则返回一个小于 0 的值。

        若 a 等于 b,则返回 0。

        若 a 大于 b,则返回一个大于 0 的值。

function NumAscSort(a,b){
    return a - b;
}
function NumDescSort(a,b){
    return b - a;
}

var arr = [3,0,55,1,44,190,1,55,3]; 
arr.sort(NumDescSort);
console.log(arr); // [190,55,55,44,3,3,1,1,0]

arr.sort(NumAscSort);
console.log(arr); // [0,1,1,3,3,44,55,55,190]

        (2)冒泡排序

        随便从数组中拿一位数和后一位比较,如果是想从小到大排序,那么就把小的那一位放到前面,大的放在后面,简单来说就是交换它们的位置,如此反复的交换位置就可以得到排序的效果。

function bubbleSort(array){
    var len = array.length,d;
    for(var i = 0; i<len; i++){ 
        for(var j=i+1; j<len; j++){
            //获取第一个值和后一个值比较
            if(array[i] > array[j]){ 
                // 条件成立后,会把小的值先保存下来
                d = array[j];
                // 进行位置替换,小的在前,大的在后
                array[j] = array[i];
                array[i] = d; 
            } 
        } 
    }
    return array;
}
var arr = [3,0,55,1,44,190,1,55,3];
console.log(bubbleSort(arr)); // [0,1,1,3,3,44,55,55,190]

        3、计算数组相同元素个数方法

function bubbleSort(array){
    var elementNum = [];
    var length = array.length;
    array.sort(function(a,b){ return a-b });
    console.log(array) // [0,1,1,3,3,44,55,55,190]
    for (var i=0; i<length;) {
        var count = 0;
        for(var j=i; j<length; j++){
            if( array[i]===array[j]){
                count++;
            }
        }
        elementNum.push({
            name:array[i],
            count:count
        })
        i+=count
    };

    return elementNum
}

var arr = [3,0,55,1,44,190,1,55,3];
console.log(bubbleSort(arr)); 
//[{name:0,count:1},{name:1,count:2},{name:3,conut:2},{name:44,conut:1},{name:55,count:2},{name:190:count:1}]
前端交流群: MVC前端网(menvscode.com)-qq交流群:551903636

邮箱快速注册

忘记密码