在关联数组上删除vs拼接
如果我有一个从我收集的JS关联数组实际上是一个对象,我希望删除一个元素,使用delete myArr[someId]
将设置元素为undefined,而拼接将无法工作… …那么如果我希望删除一个元素(而不是将其设置为undefined
),那么关联数组有什么select呢?
js中的术语起初可能会让人困惑,所以让我们理清这一点。
是的,几乎所有的js都是一个对象。 但是,数据types有所不同。
一个数组可以像关联数组一样使用,但它与对象字面量不同。
var x = []; //array var y = {}; //object literal
一个数组就像一个列表。 数组的键可以是数字索引或string。
var x = ['a','b']; // x[0] === 'a', x[1] === 'b'; var x = []; x['one'] = 'a'; x['blah'] = 'b';
对象文字就像词典一样。 他们可以用类似的方式。
var x = { 0: 'a', 1: 'b' }; var x = { one: 'a', two: 'b' };
但是,这是您需要了解差异的地方。
您可以像对象文字一样使用数组,但是不能像数组一样使用对象文字。
数组具有自动的“length”属性,该属性根据数组中元素的总数自动递增和递减。 你没有得到这与对象文字。 数组也可以获得所有其他特定于数组的方法,如移位,非移位,拼接,popup,推送等。对象文字不具有这些方法。
让我们来谈谈删除以及数组和对象文字上发生了什么。
var x = ['a', 'b']; //["a", "b"] delete x[0]; //[undefined, "b"] var x = {0:'1', 1:'b'}// { 0:"1", 1:"b"} delete x[0]; // { 1:"b" }
如果您对数组的元素执行删除操作,则数组的长度不会更改。 元素索引被保留,值被设置为'undefined';
相反,对对象文字执行删除操作会从对象中删除键/值。
最后,如果你想从数组中删除一个元素。
var x = ['a', 'b']; x.splice(0,1); //modifies x. ['b']
所以,总之在对象文字上使用删除。 在数组上使用拼接。
希望这可以帮助。
没有其他的select。 myArr["someCrazyIndexYouHaventPreviouslyUsed"]
将返回undefined; 关联数组总是会给你undefined
的索引不存在。
因此,删除myArr[someId]
将导致myArr
像其他所有不存在的索引一样对待someId
是不是你想要的?