在javascript中从多维数组中删除元素的最便携方法是什么?

时间:2011-12-24 20:44:37

标签: javascript multidimensional-array undefined

在javascript中从多维稀疏数组中删除元素的最便携方法是什么?

如果行有时可能未定义,那么下面的工作是否会正常工作?

if( content[row] ) {
    delete content[row][col];
}

这会有效吗?它会更好吗?

if( r=content[row] ) {
    delete r[col];
}

2 个答案:

答案 0 :(得分:7)

这取决于。 delete将在元素所在的数组中留下一个空格,如下所示:

var arr = [0, 1, 2, 3];
delete arr[1];
arr; // [0, undefined, 2, 3]

要从数组中删除元素而不留下任何漏洞,您应该使用splice()

arr.splice(1, 1); // Start deleting at index 1, delete one element
arr; // [0, 2, 3]

您的两个示例都运行正常 - 如果content[row]不存在,则不会评估if语句的正文。

答案 1 :(得分:1)

您不仅需要删除元素,还需要调整数组的长度。

我通常将数组中最后一个元素的索引设置为替换元素,删除最后一个元素,并减少长度。它很快,但它不保留阵列的结构。

以下是我正在研究的GameAPI的摘录:

a是数组,i是索引

removeAt    : function(a, i) {

    //Removes an element in array

    if(!(a.length>i)) return false;

    delete a[i];
    a[i] = a[a.length-1];
    delete a[a.length-1];
    a.length--;

    return true;
}