js数组循环的时间复杂度

摘要:
最好将映射放在外部,并使用变量来接收constc=a.filter(n=>2 for Eachconsole.time('printd')constd=[]b.forEach(n=<
      const a = []
      for (i = 0; i < 100000; i++) {
        a.push({ id: i, name: 'xx' + i })
      }

      const b = []
      for (let i = 0; i < 100; i++) {
        b.push({ id: i, name: 'yy' + i })
      }

      // 最慢的循环:n^2,最好把map放到外面用变量接收
      const c = a.filter(n => b.map(m => m.id).includes(n.id))
      // console.log(c)

      // 三种方法:
      // 第一种:2个forEach
      console.time('打印d')
      const d = []
      b.forEach(n => {
        a.forEach(m => {
          if (n.id === m.id) d.push(n)
        })
      })
      console.log(d)
      console.timeEnd('打印d')

      // 把长的数据放在外面更快
      console.time('打印d1')
      const d1 = []
      a.forEach(n => {
        b.forEach(m => {
          if (n.id === m.id) d1.push(m)
        })
      })
      console.log(d1)
      console.timeEnd('打印d1')

      // 第二种:filter(ES5) + includes(ES7)
      console.time('打印e')
      const ids = a.map(m => m.id)
      const e = b.filter(n => ids.includes(n.id))
      console.log(e)
      console.timeEnd('打印e')

      // 第三种:创建obj(兼容性好)
      console.time('打印f')
      let obj = {}
      b.forEach(n => (obj[n.id] = n.name))
      console.log(obj)
      const f = a.filter(n => {
        n.name = obj[n.id]
        return obj[n.id]
      })
      console.log(f)
      console.timeEnd('打印f')

结果:

js数组循环的时间复杂度第1张

总结:

  1、不要在filter中写map,这种的时间复杂度是 n^2,最慢

  2、通过两个forEach来遍历时,时间复杂度为 n*2。把长的数据放在外面速度更快

  3、filter + includes的方法除了兼容性问题,运行很快

  4、通过创建一个obj的形式,时间复杂度为n,没有兼容性问题

免责声明:文章转载自《js数组循环的时间复杂度》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇java/jsp获取当前路径的几种方法Metasploit快速入门(二)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

(转)两种高效过滤敏感词算法--DFA算法和AC自动机算法

原文:https://blog.csdn.net/u013421629/article/details/83178970 一道bat面试题:快速替换10亿条标题中的5万个敏感词,有哪些解决思路? 有十亿个标题,存在一个文件中,一行一个标题。有5万个敏感词,存在另一个文件。写一个程序过滤掉所有标题中的所有敏感词,保存到另一个文件中。 1、DFA过滤敏感词...

filter()数组遍历

filter() 方法对源数组的每个元素判断。返回符合要求的元素,并将他们组成一个新的数组 特性: 1、filter()不会改变源数组 2、filter()返回新数组 语法: arr.filter(callback(currentValue [, index [, array]])[, thisArg]) 参数: arr.filter()有三个参数,...

luffy(一)

一.pip安装源 介绍 """1、采用国内源,加速下载模块的速度2、常用pip源: -- 豆瓣:https://pypi.douban.com/simple -- 阿里:https://mirrors.aliyun.com/pypi/simple3、加速安装的命令: -- >: pip install -i https://pypi....

Python爬虫学习==&amp;gt;第五章:爬虫常用库的安装

学习目的:          爬虫有请求库(request、selenium)、解析库、存储库(MongoDB、Redis)、工具库,此节学习安装常用库的安装 正式步骤 Step1:urllib和re库   这两个库在安装Python中,会默认安装,下面代码示例调用:>>> import urllib >>> imp...

vue移动app扫码功能

第一步:      上面这段代码写在index.html里面,我也不知道为什么,可能是全局的关系; 第二步:      定义一个按钮,点击启动扫码功能,另外再定义一个盒子来当做扫码的容器;我给这个盒子定义了一个id类名:bcid 第三步: 第三步代码多,直接粘贴,方便你我他,我也是在别人手上抄过来,作了部分改变      //创建扫描控件 startRec...

python 绘图 异常点绘制使用 ax.plot(abnormal_points['ds'], abnormal_points['y'], "rX", label='abnormal points')

from matplotlib import pyplot as plt def my_plot(title, m, fcst, ax=None, uncertainty=True, plot_cap=True, xlabel='ds', ylabel='y', abnormal_points=None ): """Plo...