我有一个包含两个列表的网页。搜索填充的源列表(由availableThings表示),以及用户选择的项目(selectedThings)。我想维护一个selectedThings的唯一列表,所以我想从可用事物列表中删除已经选择的事物。在下面的代码段中,data.AvailableThings是从服务器填充的,并且不了解用户选择的内容。用户最多可以选择3个项目,因此ergo selectedThings.items最多包含3个项目。 availableThings.items可能是几千。

填充availableThings.items之后,我将其输入ICanHaz以生成HTML。 FWIW,我正在使用jQuery进行列表之间的拖动行为,但问题是与jQuery无关。

[... jQuery AJAX call snipped ...]
success: function (data) {

    availableThings.items = [];

    for (var thing in data.AvailableThings) {
        var addToList = true;

        for (var existing in selectedThings.items) {
            if (existing.Id === thing.Id) {
                addToList = false;
                break;
            }
        }

        if (addToList) {
            availableThings.items.push(thing);
        }
    }
}

最佳答案

如果n是可用事物的计数,而m是选定事物的计数,则为O(n * m),而如果按ID散列,则可以将其转换为O(n + m)。

var existingIds = {};

for (var existing in selectedThings.items) {
  existingIds[existing.Id] = existingIds;
}

availableThings.items = [];
for (var thing in data.AvailableThings) {
    if (existingIds[thing.Id] !== existingIds) {
        availableThings.items.push(thing);
    }
}

关于javascript - 这是效率低下的感觉吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7365188/

10-09 22:37