我有一个包含两个列表的网页。搜索填充的源列表(由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/