我有带整数索引的数组
myarray[1]=val1
myarray[2]=val2
myarray[4]=val3
myarray[5]=val4
在这种情况下,myarray [0]和myarray [3]未定义且
for (var i in myarray)
{
console.log(i)
}
输出1,2,4,5
我喜欢“移除”myarray [2]而不会移动其他成员 删除后,myarray [2]也未定义 和输出应该是 1,4,5
我tred myarray.splice(2,1,undefined)
但它仍然是输出索引2
答案 0 :(得分:4)
使用delete
:
delete myarray[2];
答案 1 :(得分:4)
停止停止!
第一个问题,虽然是js中的大多数东西都是对象,但是不要用in for迭代数组。“for ... in”用于对象文字。对数组使用正常的迭代循环。
其次,删除旨在删除对象的属性。同样,数组是对象,但这不是删除的正确用法。
如果要将数组索引的值设置为undefined,只需将其指定为undefined。
myarray[2] = undefined;
编辑:
你不在数组中使用... in的原因是:
var x = [1,2,3];
x.test = 'abc';
for(var i in x){
console.log(x[i]);
}
//1,2,3,abc
for(var i=0; i<x.length; i++){
console.log(x[i]);
}
//1,2,3
德米特里似乎试图做的只是返回具有值的索引。这样做。
for(var i=0; i<myarray.length; i++){
if( myarray[i] !== undefined ){
console.log( myarray[i] );
}
}
同样,要将索引设置为undefined,您不应该使用delete。你可以,但不是。只是做:
myarray[i] = undefined;
希望这有帮助。
答案 2 :(得分:0)
delete myArray[2];
使用delete删除数组索引。
>> myArray[2]
undefined
现在你不会用你的for-in循环迭代它。
此外,for-in应仅用于迭代对象的属性。迭代数组时使用常规for循环。