0

我在这样的数组中设置一个元素:

dialogs[id] = $.modal({
    title: "Admin",
    closeButton: true,
    content: content,
    width: false,
    resizeOnLoad: true,
    buttons: {
        'Close': function (win) {
            win.closeModal();
        }
    }
}).find('form') // Attach logic on forms
.submit(formSubmitHandler)
.end();

后来我检查是否存在这样的:

if (!dialogs[id]) {
    loadAndShowDialog(id, link, url);
}

如何id从对话框数组中删除记录?有类似的东西dialogs[id].Remove()吗?

4

4 回答 4

3

命令是:(将其设置为未定义)

delete dialogs[id];

如果你想完全删除:使用splice.

编辑

我错误地认为它是您要删除的对象属性(删除在这里会很好-唯一的解决方案)

然而 - 你有一个数组,正确的答案是使用splice.

于 2012-04-23T08:01:00.837 回答
1

我建议你看看这个教程。它很好地解释了如何在 javascript 中使用数组。

delete方法不会删除元素,它只是将其替换为undefined. 要从数组中删除元素,您需要splice.

根据MDN,这里是如何使用它:

array.splice(index , howMany[, element1[, ...[, elementN]]])

因此,您需要index开始删除的位置,以及howMany要删除的元素数量。

对于您的情况,它将是:

dialogs.splice( dialogs.indexOf( id ), 1 )

注意使用indexOf来找出id值的索引。

于 2012-04-23T08:10:56.337 回答
0

您可以使用

delete dialogd[id]; //will not remove element, will set it to undefined

或者

dialogs.splice(id,1); //will not work in case of non-numeric indices

选择一个合适的。我更喜欢第二种。

于 2012-04-23T08:03:25.810 回答
0

从数组中删除项目时,使用splice

dialogs.splice(id,1); //remove "1" item starting from index "id"

请注意,这会删除该项目,并更改数组长度。所以在一个 3 的数组中,如果我这样拼接,数组现在的长度为 2。

usingdelete不会影响数组,但会保留该位置undefined。这就像在那个位置“改变”或“留下一个洞”。

delete dialogs[id];  //value at index "id" is now undefined 
于 2012-04-23T08:09:36.967 回答