sar*_*ake 45 javascript arrays associative-array
如果我有一个JS关联数组,它来自我收集的实际上是一个对象,并且我希望删除一个元素,使用delete myArr[someId]将元素设置为undefined,而splice将根本不起作用...那么什么是替代如果我想删除一个元素(而不是将其设置为undefined),则为关联数组
Geu*_*uis 167
js中的术语起初可能会令人困惑,所以让我们理顺它.
是的,几乎js中的所有东西都是一个对象.但是,数据类型存在差异.
数组可以像关联数组一样使用,但它与对象文字不同.
var x = []; //array
var y = {}; //object literal
Run Code Online (Sandbox Code Playgroud)
数组就像一个列表.数组的键可以是数字索引或字符串.
var x = ['a','b']; // x[0] === 'a', x[1] === 'b';
var x = [];
x['one'] = 'a';
x['blah'] = 'b';
Run Code Online (Sandbox Code Playgroud)
对象文字就像字典.它们可以以类似的方式使用.
var x = { 0: 'a', 1: 'b' };
var x = { one: 'a', two: 'b' };
Run Code Online (Sandbox Code Playgroud)
但是,您需要了解这些差异.
您可以像对象文字一样使用数组,但不能像数组一样使用对象文字.
数组具有自动"长度"属性,该属性根据数组中元素的总数自动递增和递减.你没有得到对象文字.数组也可以获得所有其他特定于数组的方法,如shift,unshift,splice,pop,push等.对象文字没有这些方法.
我们来谈谈删除以及在数组和对象文字上发生的事情.
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" }
Run Code Online (Sandbox Code Playgroud)
如果对数组的元素执行删除,则数组的长度不会更改.元素索引被保留,值设置为'undefined';
相反,对对象文字执行删除会从对象中删除键/值.
最后,如果要从数组中删除元素.
var x = ['a', 'b'];
x.splice(0,1); //modifies x. ['b']
Run Code Online (Sandbox Code Playgroud)
因此,总结一下,在对象文字上使用delete.在数组上使用拼接.
希望这可以帮助.
没有其他选择. myArr["someCrazyIndexYouHaventPreviouslyUsed"]将返回undefined; 关联数组将始终为您undefined提供不存在的索引.
所以删除myArr[someId]会导致像其他不存在的索引一样myArr对待 - someId不是你想要的吗?
| 归档时间: |
|
| 查看次数: |
35571 次 |
| 最近记录: |