如何在没有拼接和没有未定义的剩余的情况下删除数组元素?

时间:2013-12-09 14:50:28

标签: javascript arrays

是否可以删除某个位置的数组元素,而无需重新排列索引,并且该位置不会更改为未定义?

我认为删除或拼接不可能吗?

我需要一种准确的方法来查看数组的长度,而无需重新排列索引。

我不想使用拼接,因为我有一个对象具有映射到表格(Punkt)的实际X,Y点的特定位置。

UPDATE:实际上,知道数组元素是否仅存在于未定义的值中也可能对我有所帮助,是否有更简单的方法可以循环使用?

var keys = Object.keys(racks);
for (var i = 0; i < keys.length; i++)
{
    for (var x = 0; x < racks[keys[i]].punkt.length; x++)
    {
        if(racks[keys[i]].punkt[x].y == fullName)
        {
            //delete racks[keys[i]].punkt[x];
            racks[keys[i]].punkt.splice(x,1);
            console.log(keys[i] + " : " + racks[keys[i]].punkt.length); 
        }
    }
}

3 个答案:

答案 0 :(得分:4)

  

我认为删除或拼接不可能吗?

     

我需要一种准确的方法来查看数组的长度,而无需重新排列索引。

然后delete,从数组中检索时hasOwnPropertyin保护,以及计算元素的循环(或保持跟踪的单独变量)是唯一的方法。 JavaScript的标准数组本质上是稀疏(因为它们是not really arrays at all),它们可能在没有条目的地方有间隙。要创建间隙,请使用delete删除数组条目。

示例:

// Setup
var a = ["a", "b", "c", "d"];
console.log(a.length); // 4

// Using delete
delete a[2];           // Delete the entry containing "c"
console.log(a.length); // Still 4
a.hasOwnProperty(2);   // false

// Using the guard when getting an entry
if (a.hasOwnProperty(2)) { // Or `if (2 in a)`
    // Get and use [2]
}
else {
    // Do whatever it is you want to do when the array doesn't have the entry
}

// Finding out how many it *really* has:
var key;
var count = 0;
for (key in a) {
    if (a.hasOwnProperty(key)  &&        // See below
        /^0$|^[1-9]\d*$/.test(key) &&
        key <= 4294967294
        ) {
        ++count;
    }
}
console.log(count);    // 3

有关循环中if背后的详细信息,请参阅this other answer。如果您从未在数组上放置非元素属性,则可以跳过if的第二和第三部分。

答案 1 :(得分:1)

这完美无缺。

    var delrow = window.event.srcElement;
    while ((delrow = delrow.parentElement) && delrow.tagName != "TR");
    delrow.parentElement.removeChild(delrow);

答案 2 :(得分:0)

var punten = racks[keys[i]].punkt.length;
                            if(racks[keys[i]].punkt[x].y == fullName)
                            {
                                delete racks[keys[i]].punkt[x];
                                punten--;
                            }

                            if(punten==0)
                            {
                                console.log("Could have removed device: " + keys[i]);
                            }