相关疑难解决方法(0)

Javascript ES6计算/时间复杂的集合

密钥集合(Set,Map,WeakSet和WeakMap)的ES6规范提供了什么时间复杂度(以大O表示法)?

我的期望,并且我希望大多数开发人员都希望,规范和实现将使用广泛接受的性能算法,在这种情况下Set.prototype.has,add并且delete在一般情况下都是O(1).相同的MapWeak–等价物.

对于我来说,实现的时间复杂性是否是强制性的,例如在ECMAScript 2015语言规范 - 第6版 - 23.2设置对象中,这一点并不完全清楚.

除非我误解它(我当然很可能),看起来ECMA规范要求实现(例如Set.prototype.has)使用线性时间(O(n))算法.令我非常惊讶的是,规范中不会强制要求甚至不允许使用更高性能的算法,我会对为什么会出现这种情况的解释非常感兴趣.

javascript time-complexity ecmascript-6

65
推荐指数
3
解决办法
2万
查看次数

Javascript设置vs阵列vs对象定义

我不清楚Set和Array在Javascript中的区别是什么(除了Set是ES6中的新功能).为什么要使用Set而不是Array或Object定义.

为什么要介绍Set?

javascript set ecmascript-6

5
推荐指数
1
解决办法
4125
查看次数

何时在javaScript中使用set

我只是javaScript的初学者,拥有python的背景.我正在尝试这个练习来检查string2的每个字符是否都包含在string1中.例如,如果STRING1是"你好",我会回来true,如果字符串2是"列城"的false,如果字符串2为"低".

我提出的是这个:

function mutation(arr) {
  var set = new Set(string1.split(''));
  for (var i = 0; i < string2.length; i++)
    if (!set.has(string2[i]))
      return false;
  return true;
}
Run Code Online (Sandbox Code Playgroud)

我还可以去转换字符串2为一组,然后就采取即操作的差异set(string2) - set(string1),这将取我的一组是包含字符串,但不是在字符串1个字符,但我读创建一组是昂贵的,所以我没有去先.

我检查了其他解决方案,每个人都在使用string1.indexOf(letter)方法来检查string2中的每个字母是否都在string1中.

我想知道什么时候应该使用一组差异.为什么每个人都在使用array.indexOf()花费O(n)而不是set.has()O(1)的方法的方法.如果我正在使用,是否有任何陷阱set.has().(说浏览器兼容性)?

任何建议都有帮助.

javascript arrays set indexof

5
推荐指数
1
解决办法
1382
查看次数

JavaScript:为什么map.has比set.has和array.indexOf快这么多?

我遇到了以下基准:https://jsperf.com/array-includes-and-find-methods-vs-set-has \n如果你执行它,你会发现这map.has是迄今为止最在浏览器中查找集合中的项目的有效方法。

\n\n

我还在 Node 中使用重新创建了这个测试benchmarks.js,并得到了以下结果:

\n\n

节点9.4.0:

\n\n
set.has x 6,454,428 ops/sec \xc2\xb11.25% (90 runs sampled)\nmap.has x 64,519,657 ops/sec \xc2\xb10.95% (86 runs sampled)\narr.includes x 11,415,721 ops/sec \xc2\xb11.41% (87 runs sampled)\narr.indexOf x 11,344,587 ops/sec \xc2\xb11.39% (87 runs sampled)\narr.find x 1,579,635 ops/sec \xc2\xb11.09% (92 runs sampled)\nFastest is map.has\n
Run Code Online (Sandbox Code Playgroud)\n\n

节点6.2.0:

\n\n
set.has x 16,677,473 ops/sec \xc2\xb11.35% (86 runs sampled)\nmap.has x 15,089,503 ops/sec \xc2\xb11.35% (85 runs sampled)\narr.includes x 1,345,019 ops/sec \xc2\xb11.31% (89 runs sampled)\narr.indexOf x 15,943,213 ops/sec …
Run Code Online (Sandbox Code Playgroud)

javascript benchmarking google-chrome v8 node.js

5
推荐指数
1
解决办法
4006
查看次数

JavaScript快速查找数据结构?

我有一个按字母顺序排列的109582个字符串数组.我的Web应用程序将对数组中是否包含给定字符串进行大量快速检查.显然我可以创建一个包含哈希表或二叉树的包装类,但是我可以使用任何本机JavaScript数据结构吗?

javascript

2
推荐指数
2
解决办法
2851
查看次数

Javascript 计算对象数组中对象属性的唯一值

当我有一个对象数组时,如何计算对象属性的唯一值?

let organisations = [
  {
    "id": 1,
    "name": "nameOne",
  },
  {
    "id": 2,
    "name": "nameTwo",
  },
  {
    "id": 3,
    "name": "nameOne",
  }
]
Run Code Online (Sandbox Code Playgroud)

在这种情况下,如何计算唯一组织名称的数量。这里的答案是两个,因为有两个唯一的名称。

这不起作用

 var counts = this.filteredExtendedDeals.reduce(
        (organisations, name) => {
          counts[name] = (counts[name] || 0) + 1;
          return counts;
        },
        {}
      );
      return Object.keys(counts);
Run Code Online (Sandbox Code Playgroud)

javascript

-2
推荐指数
1
解决办法
2427
查看次数