gpt4 book ai didi

javascript - 从对象中删除行

转载 作者:行者123 更新时间:2023-11-28 20:45:15 24 4
gpt4 key购买 nike

我有一个包含数组的对象:

<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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com