JS 数组去重

  • 1、 数组元素为基本数据类型

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    const unique = (arrwy) => {
    let obj = {}, arr = [];
    arrwy.forEach((ele, index) => {
    if(obj[ele]){
    return
    }else{
    obj[ele] = '1';
    arr.push(ele)
    }
    });
    return arr;
    }

    原理:new一个空对象和一个空数组,遍历原数组,将原数组每一项作为空对象的新增属性,循环过程中,如果目标对象已经包含该属性,则return,否则给该属性取值为1,并把该属性push进空数组。此空数组即为原数组去重后的数组。

  • 2、 数组元素为基本数据类型(es6 Set)

    1
    [...new Set([1,'1','1',2,1])]
  • 3、 数组元素为对象,且去重标准为其中的某一个属性

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    	const unique = (arrwy,key) => {
    let obj = {}, arr = [];
    arrwy.forEach((ele, index) => {
    if(obj[ele.key]){
    return
    }else{
    obj[ele.key] = '1';
    arr.push(ele)
    }
    });
    return arr;
    }
    ```

    原理:new一个空对象和一个空数组,遍历原数组,将原数组每一项的指定属性的属性值作为空对象的新增属性,循环过程中,如果目标对象已经包含该属性,则return,否则给该属性取值为1,并把该属性push进空数组。此空数组即为原数组去重后的数组。

    * 4、 数组元素为对象,且去重标准为其中的某几个属性

    ``` bash
    //将对象元素转换成字符串以作比较
    function obj2key(obj, keys){
    var n = keys.length,
    key = [];
    while(n--){
    key.push(obj[keys[n]]);
    }
    return key.join('|');
    }

    //去重操作
    function uniqeByKeys(array,keys){
    var arr = [];
    var hash = {};
    for (var i = 0, j = array.length; i < j; i++) {
    var k = obj2key(array[i], keys);
    if (!(k in hash)) {
    hash[k] = true;
    arr .push(array[i]);
    }
    }
    return arr ;
    }

    let arr = [{
    name: 'aaa',
    type: 'shop'
    },{
    name: 'bbb',
    type: 'msg'
    },{
    name: 'bbb',
    type: 'msg'
    }];
    arr = uniqeByKeys(arr,['name','type']);
原创技术分享,您的支持将鼓励我继续创作