js 数组去重常见的几种方式

时间:2022-09-07 17:38:38
  • 1.利用标记
  • var arr = [2,6,2,6,4,3,16];// arr = [2,6,4,3,16]
    function norepeat(arr){
    var res = [];
    for(var i=0;i<arr.length;i++){
    var flag = true;
    for(var j=0;j<res.length;j++){
    if(arr[i]==res[j]){
    flag = false;//将要推入新数组的数组元素 在新数组中有重复
    }
    }
    if(flag){
    res.push(arr[i]);
    }
    }
    return res;
    }
    console.log(norepeat(arr));
  • 2.indexOf()找对应的下标
  • function norepeat(arr){
    var newArr = [];
    for(var i=0;i<arr.length;i++){
    if(newArr.indexOf(arr[i]) == -1){
    newArr.push(arr[i]);
    }
    }
    return newArr;
    }
    var arr = [1,2,3,5,6,1,2,5];
    console.log(norepeat(arr));
  • 3.Es5迭代方法filter() +indexOf
  •   var arr = [1, 2, 3, 1, 2, 3, 5, 6, 4, 5];
    var newArr = arr.filter(function(value, index, array) {
    console.log(value,index,array);
    return arr.indexOf(value) == index;
    })
    alert(newArr);
  • 4.利用快速排序去重(比较麻烦的一种啦)
  •      function quickSort(arr) {
    if(Array.isArray(arr)) { //先判断是不是个数组
    if(arr.length <= 1) { //设置限定条件
    return arr;
    }
    var left = [];
    var right = [];
    var midIndex = Math.floor(arr.length / 2); //找中间索引
    var midValue = arr.splice(midIndex, 1); //找中间值
    for(var j = 0; j < arr.length; j++) {
    if(arr[j] < midValue) {
    left.push(arr[j]);
    }
    if(arr[j] > midValue){
    right.push(arr[j]);
    }
    }
    return quickSort(left).concat(midValue, quickSort(right)); //递归直至数组长度为1 } else {
    alert('请传个数组');
    }
    }
    var arr1 = [6, 2, 5, 7, 21, 1,2,5];
    console.log(quickSort(arr1));