我有一个对象数组,其中的键是一个md5字符串,值是一个对象 [0315778255cca8d2f773642ad1d3678f] = {a:12,b:34}。我需要删除基于他们的关键数组元素,我试着拼接,但失败,因为我想这些键是非数字。 我也尝试按位置进行拼接,但是失败了,甚至删除了元素,但我们都知道它并不理想。使用非数字键删除数组元素
我可以改变我的实现从数组到对象,但也会有相同的问题或多或少我想。
任何想法欢迎
我有一个对象数组,其中的键是一个md5字符串,值是一个对象 [0315778255cca8d2f773642ad1d3678f] = {a:12,b:34}。我需要删除基于他们的关键数组元素,我试着拼接,但失败,因为我想这些键是非数字。 我也尝试按位置进行拼接,但是失败了,甚至删除了元素,但我们都知道它并不理想。使用非数字键删除数组元素
我可以改变我的实现从数组到对象,但也会有相同的问题或多或少我想。
任何想法欢迎
splice
确实有关阵列索引(作为阵列的数字属性的称呼),不是关于其他属性。
从对象(包括数组)删除一个属性,使用delete
:
delete theArray['0315778255cca8d2f773642ad1d3678f'];
尽管它相似的其他语言“删除”,delete
在JavaScript中有没有(直接)做记忆管理;它所做的就是从对象中删除一个属性(完全是这样;它不会将属性的值设置为undefined
或其他)。
备注:如果你是只有使用非数字属性,你可能根本不需要数组。使用JavaScript的Array
类型的唯一原因是,如果您需要特殊处理,它会提供名称均为数字,属性为length
(仅与数字属性相关)的属性,以及来自Array.prototype
的内容 —其中没有任何内容会执行任何操作其他非索引属性。
重新下方的评论:
删除叶中的元素代替不确定的。我需要完全摆脱它
不,delete
完全删除属性。它不会将undefined
代替。您可能会认为这样做,因为任何时候您尝试从不存在的对象中检索属性时,都会返回undefined
。例如: -
var obj = {}; // Object with no "foo" property at all
var x = obj.foo;
console.log("x = " + x); // "x = undefined"
可以证明该财产确实是通过使用hasOwnProperty
或删除in
:
var obj = {};
console.log('foo' in obj); // "false"
console.log(obj.hasOwnProperty('foo')); // "false"
in
将检查对象和它的原型链; hasOwnProperty
只是检查对象本身。
反观delete
:
var obj = {};
console.log(obj.hasOwnProperty('foo')); // "false"
obj.foo = "bar";
console.log(obj.hasOwnProperty('foo')); // "true"
delete obj.foo;
console.log(obj.hasOwnProperty('foo')); // "false"
obj.foo = "bar";
console.log(obj.hasOwnProperty('foo')); // "true"
delete obj['foo'];
console.log(obj.hasOwnProperty('foo')); // "false"
请注意,如果foo
是有效标识符,则delete obj.foo;
和delete obj['foo'];
都可以使用。但是,对于名称不是有效标识符的属性(如您的md5总和),您必须像上面显示的那样使用带括号的字符串(delete theArray['0315778255cca8d2f773642ad1d3678f'];
)。
delete在元素处留下未定义的元素。我需要完全摆脱它 – mbouclas
@mbouclas:不,它不。我已经添加了答案来解释你所看到的。 –