当处理巨大的数组时,并且想要从数组中过滤元素,就性能而言,创建一个新数组并将其推入新数组中,或者手动删除元素从现有的阵列使用类似这样的Deleting array elements in JavaScript - delete vs splice从JavaScript中的数组中删除元素的最佳方法?
有谁知道吗?
谢谢
当处理巨大的数组时,并且想要从数组中过滤元素,就性能而言,创建一个新数组并将其推入新数组中,或者手动删除元素从现有的阵列使用类似这样的Deleting array elements in JavaScript - delete vs splice从JavaScript中的数组中删除元素的最佳方法?
有谁知道吗?
谢谢
创建一个新的数组并推动消耗更多的时间和内存。但删除不会花费太多时间和可用内存。
如果您创建一个新数组并进行推送,它必须比较每个元素,然后再进行推送。
如果删除,则只能进行比较和删除。
第二个选项对性能有好处
您可以使用splice()从数组中删除一个项目。 考虑下面的例子,如果你想删除的项指数为2,您可以使用拼接(位置,范围)
var a = [1,2,3,4,5,6,7];
a.splice(2,1);
console.log(a);
这将输出
[1, 2, 4, 5, 6, 7]
问题不在于如何使用'.splice()',而是询问'.splice()'是否是性能的最佳选择,相比之下,创建一个填充了项目的新阵列将被保留。 – nnnnnn
答案的应该能够通过使用不同的阵列方法或其他方法运行测试而无需猜测而确定地确定。
var arr = Array(7);
var r = 3;
console.time(".splice()");
arr.splice(r, 1); // try different methods here
console.timeEnd(".splice()");
var arr = Array(7);
console.time(".filter()");
arr = arr.filter(function(_, i) { // try different methods here
return i !== r
});
console.timeEnd(".filter()");
var arr = Array(1000);
var r = 500;
console.time(".splice()");
arr.splice(r, 1);
console.timeEnd(".splice()");
var arr = Array(1000);
console.time(".filter()");
arr = arr.filter(function(_, i) {
return i !== r
});
console.timeEnd(".filter()");
var arr = Array(100000);
var r = 50000;
console.time(".splice()");
arr.splice(r, 1);
console.timeEnd(".splice()");
var arr = Array(100000);
console.time(".filter()");
arr = arr.filter(function(_, i) {
return i !== r
});
console.timeEnd(".filter()");
@omega在浏览器'console'中,'.splice()'在比'.filter()'更少的时间内返回结果。不知道'delete'是如何相关的,除非期望的结果是'undefined'被替换为设置了前一个值的数组中的索引处的值?还有哪些其他方法应该比较?请注意,'.splice()'返回的结果也比'.slice()'少。 – guest271314
您可以使用拼接的方法来修改ŧ他阵列的内容。如果你想添加元素的使用 - 如果你想删除一个元素使用
arrayName.splice(index,range,element);
- 如果删除中间元素
arrayName.splice(index,deleteCount);
问题不在于如何使用'.splice()',而是明确地询问它是否比通过其他方法创建新数组更好。 – nnnnnn
,它没有推动所有其他元素1点背后? – omega
是的。但换句话说,它必须执行n次推送。在这种情况下,只需要n/2次按压。如果要移除的元素是第一个元素,则可以使用任何方法。否则,第二种方法是好的 –
你的意思是“删除”,如在问题中提到的'delete'关键字或'.splice()'(在问题中也提到)?因为'delete'有一些明显的缺点,从它不改变数组的'.length'这个事实开始...... – nnnnnn