我有一个包含数组的对象:
<script type="text/javascript">
var statusData = {
Status: []
};
var uniqueCounter = 1
function createJsonFmtData() {
// Used as unique id at client side
var uniqueCounter =uniqueCounter + 1;
statusData.Status.push({
"Name": Name,
"Time": Time,
"Email": Mail,
"Name": Type,
"Value": Value,
"uniqueId": uniqueCounter
});
}
function DelNewlyCreStatusRow(rowId) {
// First pop elment from json data
var val;
for (val = 0; val < statusData.Status.length; ++val) {
if (statusData.Status[val].uniqueId == rowId) {
delete statusData.Status[val];
break;
}
}
</script>
当尝试调用 DelNewlyCreStatusRow
时,会出现错误:
TypeError: statusData.Status[val] is undefined
我无法在这里弄清楚它在哪里,因为我已将其声明为全局。
最佳答案
这是因为您试图从数组中错误地删除。 delete
运算符在数组上非常有趣。它将元素替换为未定义
。看看这个:
>>> var A = [1, 2, 3];
>>> delete a[1];
>>> A;
[1, undefined, 3];
因此多次调用 DelNewlyCreStatusRow
将引发异常,因为无法评估 statusData.Status[val].uniqueId
( statusData.Status[val]
是未定义
)。
要解决此问题,请使用此代码而不是删除
:
var val;
for (val = 0; val < statusData.Status.length; ++val) {
if (statusData.Status[val].uniqueId == rowId) {
statusData.Status.splice( val, 1 );
break;
}
}
请注意,splice
会修改数组,因此如果您想一次性执行多个删除操作,则必须将 for
循环替换为 while
(并稍微重构一下代码)。由于 break
语句,此处不需要此操作。
关于javascript - 从对象中删除行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13584501/