为什么数组的自定义实现比本机JavaScript数组性能更好?

为什么数组的自定义实现比本机JavaScript数组性能更好?,javascript,arrays,Javascript,Arrays,我正在解决一个挑战,其中涉及一些新数组的循环和计算。我的解决方案在相当小的阵列上运行良好,但在包含10k+项的大型阵列上失败。我收到一个“超时错误” 然后我实现了自己的数组,如: class MyArray { constructor(initialArray) { this.length = initialArray.length this.data = initialArray } get(index) { return thi

我正在解决一个挑战,其中涉及一些新数组的循环和计算。我的解决方案在相当小的阵列上运行良好,但在包含10k+项的大型阵列上失败。我收到一个“超时错误”

然后我实现了自己的数组,如:

  class MyArray {
    constructor(initialArray) {
      this.length = initialArray.length
      this.data = initialArray
    }
    get(index) {
      return this.data[index]
    }
    push(item) {
      this.data[this.length] = item
      this.length++
      return this.data
    }
    pop() {
      const lastItem = this.data[this.length - 1]
      delete this.data[this.length - 1]
      this.length--
      return lastItem
    }
    /// etc
  }
然后,我用给定的数组开始了这项工作,并使用我的数组方法来执行计算,它甚至适用于为分配给定的大数组

我仍然不明白为什么这会更高效更快?因为我在新的数组类方法上使用本机JavaScript数组方法


如果您能对此进行更多的澄清,我将不胜感激。

问题必须来自您的数据和/或其结构。 这里有一些粗略的证据可以证明定制类并不总是比本机数组性能更好

类MyArray{
构造函数(初始化数组){
this.length=initialArray.length
this.data=initialArray
}
获取(索引){
返回此。数据[索引]
}
推送(项目){
this.data[this.length]=项
这个长度++
返回此.data
}
流行音乐(){
const lastItem=this.data[this.length-1]
删除此.data[this.length-1]
这个长度--
返回最后一项
}
}
常数测试=100000//100k
//习俗
让myCustomArray=新建MyArray([])
console.time('customClassPush');
for(设i=0;i控制台.timeEnd('nativeArrayOp')如果不知道本机数组性能不佳的确切原因,很可能无法确定。事实上,您的自定义数组已经只是实际数组的包装器。这让我相信问题出在别处,否则你可能会发现同样的问题。