如果我有一个 JS 关联数组,它是我收集到的一个真正的对象,我想删除一个元素,使用 delete myArr[someId]
会将元素设置为未定义,同时splice 根本不起作用...那么如果我想删除一个元素(而不是将其设置为 undefined
),关联数组的替代方案是什么
最佳答案
js 中的术语一开始可能会令人困惑,所以让我们理清一下。
是的,在 js 中几乎所有东西都是对象。但是,数据类型存在差异。
数组可以类似用作关联数组,但它不同于对象字面量。
var x = []; //array
var y = {}; //object literal
数组就像一个列表。数组的键可以是数字索引或字符串。
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' };
但是,这是您需要了解差异的地方。
您可以像对象字面量一样使用数组,但不能像数组一样使用对象字面量。
数组具有自动的“长度”属性,它会根据数组中元素的总数自动递增和递减。你不会用对象文字得到这个。数组还可以获得所有其他特定于数组的方法,例如 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" }
如果对数组的元素执行删除,数组的长度不会改变。保留元素索引并将值设置为'undefined';
相反,对对象字面量执行删除会从对象中删除键/值。
最后,如果你想从数组中删除一个元素。
var x = ['a', 'b'];
x.splice(0,1); //modifies x. ['b']
因此,总而言之,对对象字面量使用 delete。在数组上使用拼接。
希望这对您有所帮助。
关于javascript - 关联数组上的删除与拼接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8173210/