2

我有整数索引的数组

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

我tredmyarray.splice(2,1,undefined)但它仍然是输出索引2

4

3 回答 3

6

停停!

第一个问题,虽然 js 中的大多数东西都是对象,但不要使用 for in 遍历数组。“for ... in”用于对象文字。对数组使用正常的迭代循环。

其次,delete 旨在删除对象上的属性。同样,数组是对象,但这不是删除的正确用法。

如果要将数组索引的值设置为未定义,只需将其分配为未定义即可。

myarray[2] = undefined;

编辑:

您不在数组上使用 for...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

Dmitry 似乎试图做的只是返回具有值的索引。像这样做。

for(var i=0; i<myarray.length; i++){
    if( myarray[i] !== undefined ){
        console.log( myarray[i] );
    }
}

同样,要将索引设置为未定义,您不应使用删除。你可以,但不要。做就是了:

myarray[i] = undefined;

希望这可以帮助。

于 2013-10-02T22:00:19.400 回答
4

使用delete

delete myarray[2];
于 2013-10-02T21:51:51.927 回答
0
delete myArray[2];

使用 delete 删除数组索引。

>> myArray[2]
undefined

现在您不会使用 for-in 循环对其进行迭代。

此外,for-in 只能用于迭代对象的属性。遍历数组时使用常规的 for 循环。

于 2013-10-02T21:55:00.330 回答