【发布时间】:2012-05-11 02:19:21
【问题描述】:
我有一个名为SelectedItems 的整数数组。我有另一个数组,其中包含名为AvailableItems 的对象,它是从 json 解析的;这些Item 对象具有{ContainerID, ContainerName, ItemID, ItemName} 属性。
我想将 SelectedItems 从整数数组转换为 Items 数组,其中每个 ItemID 都替换为与 AvailableItems 中的 ItemID 对应的 Item 对象。 SelectedItems 中的每个 ItemID 都是唯一的。
我从 2 个循环开始:一个循环遍历 SelectedItems 的每个元素,但后来我发现自己每次都循环遍历 AvailableItems 以找到对应的 ItemID 以及我需要复制到 SelectedItems 的对象键.
所以基本上我构建了一个看似非常低效的循环。我想知道是否有更好的方法来避免循环内的重复循环?
样本数据:
对于AvailableItems,你有
{
ContainerID: i,
ContainerName: 'SomeName',
ItemID: j,
ItemName: 'SomeOtherName'
}
可能是 1,000 个对象,然后 SelectedItems 是整数数组
[23,43,64,34...]
谢谢。
【问题讨论】:
-
您可以根据第一个数组过滤第二个数组,然后返回结果,使用 Array.filter 之类的函数,您可以使用 Array.indexOf 检查第一个元素中是否包含元素> 每次条件为真时 -1。
-
@camus:好的,您的评论给出了如何更好地重做它的想法。我将带有 jquery.extend 的 AvailableItems 数组复制到一个名为 CandidateItems 的新数组中,然后循环遍历该数组:我检查每个元素的 ItemID 是否在带有 $.InArray 的 SelectedItems 中,如果不是,则删除该元素。在循环结束时,我将 CandidateArray 分配给 SelectedItems 和瞧