在javascript中从多维稀疏数组中删除元素的最便携方法是什么?
如果行有时可能未定义,那么下面的工作是否会正常工作?
if( content[row] ) {
delete content[row][col];
}
这会有效吗?它会更好吗?
if( r=content[row] ) {
delete r[col];
}
答案 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;
}