javascript - 从对象中删除行

标签 javascript jquery

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

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

相关文章:

javascript - 谷歌组织结构图 : Modify node parent

javascript - Jquery UI 拖放和可排序(保留拖动的项目)

javascript - jquery 查找数组中特定的字符串模式

javascript - 没有用于 HTML 输入字段的 Prev、Next、Done 按钮的 iOS 键盘?

javascript - rails : Passing controller variable to JS using ERB slows page?

javascript - 保存并获取 Firebase 集合中项目的 $priority AngularFire 0.6.0

javascript - 为什么我的 wp_enqueue_scripts 没有触发

jQuery bar-rating 插件颜色变体

javascript - 如何计算条目列表之间的总时间?

javascript - 如何将它绑定(bind)到 AngularIO 的 Observable::subscribe 函数?