数组中.splice (+ loops) vs Delete Object[..]vs Object[…]=未定义
Array.splice (+ loops) vs Delete Object[...] vs Object[...] = undefined
因此,为了简单起见,我需要删除/替换一堆(10000+)对象,我们可以假设该对象包含一个(String)唯一的'id'。这些项通常需要重命名(更改id),但不像查找
那么频繁。{ id: 'one' }, { id: 'two' }, ...
如果我把它们放在一个"关联数组"中(坏习惯),我可以快速访问它们,但需要循环(慢)来删除(注意:这实际上不起作用,因为findIndex只在适当的数组上正确工作,但for循环会做同样的事情)
arr = [];
arr['one'] = { id: 'one' };
arr['two'] = { id: 'two' };
arr.splice(arr.findIndex(function(i) { return i.id === 'one'; }), 1);
如果我将它们放在一个正常的数组中,我必须循环(慢)通过ID找到项目,删除也需要循环(慢)(编辑:在我的特殊情况下,删除它应该相对较快,因为我已经查找了它并有一个引用,但如果我失去引用,显然更慢)
arr = [{ id: 'one', }, { id: 'two' }];
arr.splice(arr.findIndex(function(i) { return i.id === 'one'; }), 1);
或者,如果我以明显正确的方式存储它们,我可以选择使用delete
关键字(我一直被告知是缓慢的,破坏优化),或者设置为未定义(这让我有很多存在的元素-内存泄漏?和较慢的循环)
obj = { one: { id: one }, two: { id: two } };
delete obj['one'];
…
obj = { one: { id: one }, two: { id: two } };
obj['one'] = undefined;
我认为delete object[...]
是最好的选择,但我对其他人的反馈很感兴趣。我应该使用哪一种,为什么?
这三种方法有不同之处。
数组。Splice删除一个对象,并将这个1之后的所有元素推回去,这样索引就不会被切断。
Delete尝试删除对象,但可能失败。这不会释放内存,只会破坏引用。垃圾收集器可以稍后释放相应的内存。
将变量设置为undefined几乎等于将该对象标记为要被垃圾收集器删除。它不会立即发生,只会在JavaScript感觉这样的时候发生。如果您将足够多的变量设置为undefined,那么该方法几乎可以实现与删除对象相同的功能。
将变量设置为undefined与删除它是不一样的,如果你使用delete,你可能会遇到错误,当你试图再次访问该变量时,当你将其设置为undefined时不会发生这种情况
- Object.prototype.hasOwnProperty.call() vs Object.prototype.h
- JavaScript - typeof Object vs Object()
- javascript foo.call(object) vs. object.foo()
- Symbol.toPrimitive vs Object.prototype.valueOf
- document.object Vs. document.getElementById()
- Backbone.Wreqr vs Javascript Object
- JavaScript:Object vs True(或其他原语)相等比较(性能/优化)
- autoload function vs json object is javascript
- Javascript static/singelton - this vs _this vs object name
- var b = Object.create(a) vs. var b = a
- Javascript文本对象符号This vs Object Name
- 模块.在nodejs中导出- fn vs object
- Object.freeze() vs const
- Using `this` vs Object.create(prototype)
- for-in vs Object.没有继承属性的keys forEach
- Javascript vs. object?丁目检查员
- jQuery object vs htmlString
- Javascript console.log(object) vs. concatenating string
- class (Object) vs id
- 数组中.splice (+ loops) vs Delete Object[..]vs Object[…]=未定义