我有整数索引的数组
myarray[1]=val1
myarray[2]=val2
myarray[4]=val3
myarray[5]=val4
Run Code Online (Sandbox Code Playgroud)
在这种情况下,myarray [0]和myarray [3]未定义,
for (var i in myarray)
{
console.log(i)
}
Run Code Online (Sandbox Code Playgroud)
输出1,2,4,5
我喜欢在不移动其他成员的情况下“删除” myarray [2],并且删除后myarray [2]也将变得未定义,输出应为1,4,5
我尝试过,myarray.splice(2,1,undefined)但仍输出索引2
停停!
第一个问题是,虽然js中的大多数事物都是对象,但是不要使用for in遍历数组。“ for ... in”是针对对象常量的。对数组使用普通的迭代循环。
其次,删除旨在删除对象的属性。同样,数组是对象,但这不是delete的正确用法。
如果要将数组索引的值设置为undefined,只需为其分配undefined。
myarray[2] = undefined;
Run Code Online (Sandbox Code Playgroud)
编辑:
在数组中不使用...的原因是:
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
Run Code Online (Sandbox Code Playgroud)
德米特里(Dmitry)似乎试图做的只是返回具有值的索引。像这样做。
for(var i=0; i<myarray.length; i++){
if( myarray[i] !== undefined ){
console.log( myarray[i] );
}
}
Run Code Online (Sandbox Code Playgroud)
同样,要将索引设置为undefined,则不应使用delete。您可以,但不能。做就是了:
myarray[i] = undefined;
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助。