将密钥收集到数组JavaScript中的最佳方法?

将密钥收集到数组JavaScript中的最佳方法?,javascript,arrays,optimization,Javascript,Arrays,Optimization,获取数组中唯一字符串的最佳方法是什么?有时,从多种方法中选择一种是有意义的,以下是3种: 创建一个数组,对于推送的每个新项目,首先检查.indexOf(array,newItem)=-1 创建一个散列,所有值均为true,例如{key1:true,key2:true},然后\ukeys(散列) 推送数组中的所有项,然后运行keys=\uq.uniq(keys) 上面的代码正在使用帮助程序 了解JavaScript构造/vm的内部知识,以及一些正式的算法知识,可能会使这成为一个不需要动脑筋的问题,

获取数组中唯一字符串的最佳方法是什么?有时,从多种方法中选择一种是有意义的,以下是3种:

  • 创建一个数组,对于推送的每个新项目,首先检查
    .indexOf(array,newItem)=-1
  • 创建一个散列,所有值均为
    true
    ,例如
    {key1:true,key2:true}
    ,然后
    \ukeys(散列)
  • 推送数组中的所有项,然后运行
    keys=\uq.uniq(keys)
  • 上面的代码正在使用帮助程序


    了解JavaScript构造/vm的内部知识,以及一些正式的算法知识,可能会使这成为一个不需要动脑筋的问题,但我还没有做到这一点。我确信不同的浏览器(和节点)会有所不同,但可能有一种更好的方法。有什么想法吗?

    对于数组的每个元素,第一个解决方案必须循环遍历数组的每个元素。这使得
    O(n²)
    变得复杂

    第二种可能是最好的,因为它只循环数组,然后循环键。这基本上是
    O(2n)
    ,也就是
    O(n)

    第三个取决于
    uniq()
    的效率。例如,它很可能只是方法2的一个实现。

    在小规模(每个对象少于50个关键点)下,第一个解决方案的速度似乎是节点中第二个解决方案的3倍多。