zoukankan      html  css  js  c++  java
  • js 算法 两个数组比较去重,性能优化

    如果追求性能,可以采用空间换时间的做法,在JS中最常见的处理方式就是构建Object,因为Object查找key的时间复杂度是O(1),而数组是O(n)

    <!DOCTYPE html>
    <html>
    <head>
        <title>js两个数组比较去重</title>
    </head>
    <body>
    <script type="text/javascript">
        // 如果追求性能,可以采用空间换时间的做法,在JS中最常见的处理方式就是构建Object,因为Object查找key的时间复杂度是O(1),而数组是O(n)
        const list1 = [
            {id: 0, name: 'xiaomin'},
            {id: 1, name: 'xiaohong'},
        ];
        const list2 = [
            {id: 0, name: 'xiaomin'},
            {id: 1, name: 'xiaohong'},
            {id: 3, name: 'xiaomin'},
            {id: 4, name: 'xiaohong'},
        ];
        // 首先构造Object
        const idSet = list1.reduce((acc, v) => {
            acc[v.id] = true;
            return acc;
        }, {});
        console.log('构造Object', idSet)
        // 遍历list2,去掉在idSet中存在的id
        const result = list2.filter(v => !idSet[v.id]);
        const repeat = list2.filter(v => idSet[v.id]);
        console.log('去重后的result', result)
        console.log('重复的repeat', repeat)
    </script>
    </body>
    </html>

    打印结果:

    <!DOCTYPE html>
    <html>
    <head>
      <title>js两个数组比较去重</title>
    </head>
    <body>
    <script type="text/javascript">
      // 如果追求性能,可以采用空间换时间的做法,在JS中最常见的处理方式就是构建Object,因为Object查找key的时间复杂度是O(1),而数组是O(n)
      const list1 = [
          {id: 0, name: 'xiaomin'},
          {id: 1, name: 'xiaohong'},
      ];
      const list2 = [
          {id: 0, name: 'xiaomin'},
          {id: 1, name: 'xiaohong'},
          {id: 3, name: 'xiaomin'},
          {id: 4, name: 'xiaohong'},
      ];
      // 首先构造Object
      const idSet = list1.reduce((accv=> {
          acc[v.id] = true;
          return acc;
      }, {});
      console.log('构造Object', idSet)
      // 遍历list2,去掉在idSet中存在的id
      const result = list2.filter(v => !idSet[v.id]);
      const repeat = list2.filter(v => idSet[v.id]);
      console.log('去重后的result', result)
      console.log('重复的repeat', repeat)
    </script>
    </body>
    </html>
  • 相关阅读:
    sizeof和strlen区别
    Reverse Words in a String
    删除字符串中重复的字符
    Reverse String
    数组中一个数字出现的次数超过了数组长度的一半,请找出这个数
    输出数组中大于等于左边所有数且小于等于右边所有数的元素
    java获取数据库里表的名字
    [转]C++编写Config类读取配置文件
    c# App.Config详解
    pitch yaw roll是什么
  • 原文地址:https://www.cnblogs.com/mmzuo-798/p/14666272.html
Copyright © 2011-2022 走看看