在关联数组上删除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是不是你想要的?