JS:数组扁平化、去重、排序

  • 数组扁平化
var arr = [[1, 3, 2, 1],[5, 3, 4, 8, 5, 6, 5],[6, 2, 8, 9, [4, 11, 15, 8, 9, 12, [12, 13, [10], 14]]], 16]

1、扁平化方法一(toString)
注意:如果arr数组中有空数组,不使用此方法,用下面的方法;同时得到数组的值是字符串,不是数字。

var newArr = arr.toString() // "1,3,2,1,5,3,4,8,5,6,5,6,2,8,9,4,11,15,8,9,12,12,13,10,14,16"
var newArr = arr.toString().split(',') // ["1", "3", "2", "1", "5", "3", "4", "8", "5", "6", "5", "6", "2", "8", "9", "4", "11", "15", "8", "9", "12", "12", "13", "10", "14", "16"]

2、扁平化方法二(正则表达式)

var newArr = JSON.stringify(arr1) // [[1,3,2,1],[5,3,4,8,5,6,5],[6,2,8,9,[4,11,15,8,9,12,[12,13,[10],14]]],16]
var newArr = JSON.stringify(arr1).replace(/\[|\]/g, '').split(',') // ["1", "3", "2", "1", "5", "3", "4", "8", "5", "6", "5", "6", "2", "8", "9", "4", "11", "15", "8", "9", "12", "12", "13", "10", "14", "16"]

3、扁平化方法三(遍历数组)

var newArr3 = []
function flat(arr) {
    for(var i = 0; i < arr.length; i++) {
        if(arr[i] instanceof Array) {
            flat(arr[i])
        } else {
            newArr3.push(arr[i])
        }
    }
}
flat(arr)
  • 数组去重
    1、利用for嵌套for,然后splice去重(ES5中最常用)
// 删除1
var arr = [1, 1, 8, 8, 12, 12, 15, 15, 16, 16];
function unlink(arr) {
    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--;
            }
        }
    }
    return arr
}
console.log(unlink(arr));

// 删除2
var arr = [1,2,3,4,4,4,4,3,3,3,2,2,2];
for (var i = 0; i < arr.length-1; i++ ) {
    for(var j = i+1; j < arr.length; j++){
        if(arr[i]==arr[j]){
            delete arr[j];
        }
    }
}
for(var i=arr.length-1;i>=0;i--){
    if(arr[i]==null){
        arr.splice(i,1);
    }
}
// console.log(arr)

// 添加1
var arr=[1,2,3,2,1,1,1,1,1,3];
var res=[];
for(var i=0;i

2、利用indexOf去重

var arr = [1, 1, 8, 8, 12, 12, 15, 15, 16, 16];
function unlink(arr) {
    if (!Array.isArray(arr)) {
        console.log('错误!')
        return
    }
    var array = [];
    for (var i = 0; i < arr.length; i++) {    // 首次遍历数组
        if (array.indexOf(arr[i]) === -1) {   // 判断索引有没有等于
            array.push(arr[i])
        }
    }
    return array
}
console.log(unlink(arr));

3、利用includes

var arr = [1, 1, 8, 8, 12, 12, 15, 15, 16, 16];
function unique(arr) {
    if (!Array.isArray(arr)) {
        console.log('type error!')
        return
    }
    var array =[];
    for(var i = 0; i < arr.length; i++) {
            if( !array.includes( arr[i]) ) {//includes 检测数组是否有某个值
                    array.push(arr[i]);
              }
    }
    return array
}
console.log(unique(arr))

4、利用filter

var arr = [1, 1, 8, 8, 12, 12, 15, 15, 16, 16];
function unlink(arr) {
    return arr.filter(function (item, index, arr) {
        //当前元素,在原始数组中的第一个索引==当前索引值,否则返回当前元素
        return arr.indexOf(item, 0) === index;
    });
}
console.log(unlink(arr));
  • 数组排序
var duplicate=[1, 3, 2, 5, 4, 8, 6, 9, 11, 15, 12, 13, 10, 14, 16]

1、 排序方法一:(sort方法)

function systemSort(arr) {
   return arr.sort(function(a, b) {
       return a - b
   })
}
var sort = systemSort(duplicate)

2、排序方法二:(冒泡排序)

  function bubbleSort(arr) {
    var len=arr.length
       for(var i = len-1; i > 0; i--) {
          for(var j = 0; j < i; j++) {
             if(arr[j] > arr[j+1]) {
             var tmp = arr[j]
             arr[j] = arr[j + 1]
             arr[j + 1]= tmp
             }  
          }
       }
       return arr
    }
    var sort1 = bubbleSort(duplicate)

参考文件:https://blog.csdn.net/qq_42957741/article/details/103859601
参考文件:https://blog.csdn.net/qq_27626333/article/details/77966760

你可能感兴趣的:(JS:数组扁平化、去重、排序)