删除没有splice()的数组元素

时间:2014-05-18 11:39:46

标签: javascript performance memory array-splice

我正在开发一款JavaScript游戏,我希望尽可能降低内存使用率。 因此我将一些对象再次设置为null,因此可以收集垃圾。 我读了一个article建议避免像Array.splice()这样的函数,因为这会创建一个新的数组,它会分配新的内存。

所以我实现了一个带有自己函数的JSFiddle,删除了特定索引处的元素并将所有元素移到后面,因此长度将设置为length -= 1。这仅影响现有阵列,而不是创建新阵列:

使用的功能代替拼接:

 deleteElem = function(arr, el) {
      var index = arr.indexOf(el);
      if (index > -1) {
        var len = arr.length - 1;
        for (var i = index; i < len; i++) {
          arr[i] = arr[i + 1];
        }
        arr.length = len;
      }
    }

我的功能的JSFiddle有时更快,有时更慢...... 我是否应该更多地关注更好的性能和更糟的内存,或更好的内存和更差的性能?

还有哪些其他方法可以避免使用Array.splice

1 个答案:

答案 0 :(得分:0)

您需要了解jsperf如何运行您的代码。它不会在每次运行代码时运行设置 - 每个设置的代码运行数百或数千次。

这意味着您使用空数组来调用99.999999%的调用,因此无法测量任何有用的内容。

你至少可以通过像http://jsperf.com/splice-vs-own-function/2那样测量它来获得一些感觉但是你需要注意50次数组的分配可能会减弱差异,因此你的方法实际上比基准可以显示。