![](/img/trans.png)
[英]How to remove an array element without splice and without undefined remaining?
[英]Remove element of array without splice()
我正在开发JavaScript游戏,并且我希望将内存使用率保持在尽可能低的水平。 因此,我将一些对象再次设置为null,以便可以收集垃圾。 我读了一篇文章 ,建议避免使用Array.splice()
类的函数,因为这会创建一个新数组,该数组分配新的内存。
因此,我实现了带有自己的函数的JSFiddle ,该函数删除特定索引处的元素并将所有元素移到后面,因此长度将设置为length- 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
?
您需要了解jsperf如何运行您的代码。 它不会在每次运行您的代码时都运行安装程序-每次安装代码都会运行数百或数千次。
这意味着您正在为99.999999%的呼叫使用一个空数组,因此没有测量任何有用的东西。
像这样http://jsperf.com/splice-vs-own-function/2进行测量,至少可以使您有所了解,但是您需要注意,分配50次数组可能会使差异变钝,并且因此,您的方法实际上比基准测试所显示的要快得多。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.