记录几种js 去重案例

前言

  • 在编程中去重还是很常见的
  • 最近被一个朋友发来的需求蒙住了,花了很多时间查阅思考解决
  • 可能是我本来实力不强吧
  • js去重有好几个方法我之前记录过了,这篇只是记录这两个新的案例
  • 如果要看的可以去点击 标签->Js笔记->Js回顾 温故知新 可以为师矣

工具/资料

  • 系统 Mac Os 10.13.3
  • 工具 vs code
  • 资料借阅网上的一篇去重案例改成需求

开始

1. 数组对象中判断出现重复的子项都清空(重复的子项也清除不保留)

  1. 案例

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    var arr = [{
    "name": "ZYTX",
    "age": "Y13xG_4wQnOWK1QwJLgg11d0pS4hewePU95UHtpMl3eE81uS74NC-6zu-Rtnw4Ix",
    "gender": "AAAAAA.doc"
    }, {
    "name": "ZYTA",
    "age": "Y13xG_4wQnOWK1QwJLgg11d0pS4hewePU95UHtpMl3eE81uS74NC-6zu-Rtnw4Ix",
    "gender": "BBBBBB.doc"
    }, {
    "name": "ZDTX",
    "age": "Y13xG_4wQnOWK1QwJLgg11d0pS4hewePU95UHtpMl3eE81uS74NC-6zu-Rtnw4Ix",
    "gender": "CCCCCC.doc"
    }, {
    "name": "ZYTX",
    "age": "Y13xG_4wQnOWK1QwJLgg11d0pS4hewePU95UHtpMl3eE81uS74NC-6zu-Rtnw4Ix",
    "gender": "AAAAAA.doc"
    }];
  2. 需求效果 (重复的都清空)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    var arr = [{
    "name": "ZYTA",
    "age": "Y13xG_4wQnOWK1QwJLgg11d0pS4hewePU95UHtpMl3eE81uS74NC-6zu-Rtnw4Ix",
    "gender": "BBBBBB.doc"
    }, {
    "name": "ZDTX",
    "age": "Y13xG_4wQnOWK1QwJLgg11d0pS4hewePU95UHtpMl3eE81uS74NC-6zu-Rtnw4Ix",
    "gender": "CCCCCC.doc"
    };
  3. 解决思路

  • 先去重复,记录重复子项
  • 提取非重复项输出
  1. 编码

    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
    var arr = [{
    "name": "ZYTX",
    "age": "Y13xG_4wQnOWK1QwJLgg11d0pS4hewePU95UHtpMl3eE81uS74NC-6zu-Rtnw4Ix",
    "gender": "AAAAAA.doc"
    }, {
    "name": "ZYTA",
    "age": "Y13xG_4wQnOWK1QwJLgg11d0pS4hewePU95UHtpMl3eE81uS74NC-6zu-Rtnw4Ix",
    "gender": "BBBBBB.doc"
    }, {
    "name": "ZDTX",
    "age": "Y13xG_4wQnOWK1QwJLgg11d0pS4hewePU95UHtpMl3eE81uS74NC-6zu-Rtnw4Ix",
    "gender": "CCCCCC.doc"
    }, {
    "name": "ZYTX",
    "age": "Y13xG_4wQnOWK1QwJLgg11d0pS4hewePU95UHtpMl3eE81uS74NC-6zu-Rtnw4Ix",
    "gender": "AAAAAA.doc"
    }, {
    "name": "ZYTX",
    "age": "Y13xG_4wQnOWK1QwJLgg11d0pS4hewePU95UHtpMl3eE81uS74NC-6zu-Rtnw4Ix",
    "gender": "AAAAAA.doc"
    }];

    var hash = {}; // 记载以出现项
    var min = {}; // 记载重复项

    // 1. 去重记载(如果单一的去重第二步就不用做了)
    arr = arr.reduce(function (item, next) {
    hash[next.name] ? min[next.name] = true : hash[next.name] = true && item.push(next);
    return item
    }, [])

    // 2. 再次去重(清除之前去重留下的重复项)
    arr = arr.reduce(function (item, next) {
    min[next.name] ? '' : min[next.name] = true && item.push(next);
    return item
    }, [])

    console.log(arr);
  2. 运行查看效果

    1
    2
    3
    4
    5
    6
    7
    8
    [ { name: 'ZYTA',
    age:
    'Y13xG_4wQnOWK1QwJLgg11d0pS4hewePU95UHtpMl3eE81uS74NC-6zu-Rtnw4Ix',
    gender: 'BBBBBB.doc' },
    { name: 'ZDTX',
    age:
    'Y13xG_4wQnOWK1QwJLgg11d0pS4hewePU95UHtpMl3eE81uS74NC-6zu-Rtnw4Ix',
    gender: 'CCCCCC.doc' } ]

2. 数组对象中判断相同id中的某一项去重

  1. 案例

    1
    var arr = [{ id: 1, type: '倒2', name: '广东' }, { id: 1, type: '倒1', name: '广东' }, { id: 1, type: '倒2', name: '广东' }, { id: 1, type: '倒1', name: '广东' }, { id: 2, type: '倒1', name: '广东' }, { id: 2, type: '倒2', name: '广东' }, { id: 2, type: '倒2', name: '广东' }, { id: 2, type: '倒5', name: '广东' }];
  2. 需求效果 (保留单一重复项)

    1
    2
    3
    4
    5
    [ { id: 1, type: '倒2', name: '广东' },
    { id: 1, type: '倒1', name: '广东' },
    { id: 2, type: '倒1', name: '广东' },
    { id: 2, type: '倒2', name: '广东' },
    { id: 2, type: '倒5', name: '广东' } ]
  3. 解决思路

  • 提取id,与type子项
  • 这里用了一个小技巧在重复子项上面加上id这样就好判断很多了
  1. 编码

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    var hash = {};
    var min = {};
    arr = arr.reduce(function (item, next) {
    // 记录当id为true 和 子项+id相同才为真
    // 这里+id主要是为了好判断
    hash[next.id] && hash[next.type + next.id] == next.type ? "" : (hash[next.id] = true) && (hash[next.type+next.id] = next.type) && item.push(next);
    return item
    }, [])

    console.log(arr);
  2. 运行查看效果

    1
    2
    3
    4
    5
    [ { id: 1, type: '倒2', name: '广东' },
    { id: 1, type: '倒1', name: '广东' },
    { id: 2, type: '倒1', name: '广东' },
    { id: 2, type: '倒2', name: '广东' },
    { id: 2, type: '倒5', name: '广东' } ]

后记

  • 记录两个去重小案例,吐槽一下这个老哥1w工资真的不知道着么骗回来的,欢迎更多的同行大哥指导交流
  • 欢迎进入我的博客https://yhf7.github.io/
  • 如果有什么侵权的话,请及时添加小编微信以及qq也可以来告诉小编(905477376微信qq通用),谢谢!
-------------本文结束感谢您的阅读-------------
0%