在删除项目时防止数组更改索引号

时间:2014-04-01 07:44:43

标签: javascript arrays

在JavaScript中,我有一个在for循环中填充的数组:

var myArray = new Array();

for (var i = 0; i < someOtherArray.length; i++)
{
    var element = someOtherArray[i];
    if (someCondition)
    {
         myArray[i] = element;
    }
}

如您所见,myArray充满了来自另一个数组的索引和内容,但仅当someCondition为真。

这会产生一个这样的数组,并不存在所有索引:

myArray = 
{
    [12] => 123, 
    [15] => 456, 
    [27] => 1789,
    [39] => 623,
}

如果我现在想删除值&gt; 1000使用Array.splice()

for (i = 0; i < myArray.length; i++)
{
    if (i in myArray) //check if index exists
    {
        if (myArray[i] > 1000)
        {
            myArray.splice(i, 1); //delete 1 Item, start at index i
        }
    }
}

在此循环中,数组条目[27] => 1789被删除,但高于27的索引减1:

myArray = 
{
    [12] => 123, 
    [15] => 456, 
    [38] => 623
}

如何阻止JavaScript减少这些索引?我真的需要他们保持不变。

3 个答案:

答案 0 :(得分:3)

您可以使用delete代替splice

for (i = 0; i < myArray.length; i++)
{
    if (i in myArray) //check if index exists
    {
        if (myArray[i] > 1000)
        {
            delete myArray[i]
        }
    }
}

答案 1 :(得分:1)

您可以将该特定索引设置为undefined

for (i = 0; i < myArray.length; i++)
{
    if (i in myArray) //check if index exists
    {
        if (myArray[i] > 1000)
        {
            myArray[i]=undefined;
        }
    }
}

答案 2 :(得分:1)

我建议你使用javascript的Array.filter:

var newArray  = array.filter(function(value) { 
     return value < 1000;
     })