0

我有一个整数数组,称为SelectedItems. 我有另一个数组,其中包含被调用AvailableItems并从 json 解析的对象;这些Item对象具有属性{ContainerID, ContainerName, ItemID, ItemName}

我想SelectedItems从一个整数数组转换为一个数组,Items其中每个数组ItemID都替换为Item对应于ItemIDin的对象AvailableItems。每一个ItemID都是SelectedItems独一无二的。

我从 2个循环开始:一个循环SelectedItems遍历.AvailableItemsItemIDSelectedItems

所以基本上我建立了一个看似非常低效的循环。我想知道是否有更好的方法来避免循环内的重复循环?

样本数据:

因为AvailableItems,你有

{
  ContainerID: i, 
  ContainerName: 'SomeName', 
  ItemID: j, 
  ItemName: 'SomeOtherName'
}

with 可能是 1,000 个对象,然后SelectedItems是整数数组

[23,43,64,34...]

谢谢。

4

2 回答 2

2

您可以将数字数组AvailableItems中的每个对象放在与其匹配的索引处ItemID

因此,您知道带有ItemID5的项目位于,AvailableItems[5]而不必循环查找它。

不知道如果你在不同的值之间有很大的差距会产生什么影响ItemID,但你可以尝试一下,看看它是否运作良好。


更新:

快速搜索并阅读此答案后,看起来索引之间的间隙不会浪费大量内存。但是会影响检查的结果AvailableItems.length。如果您有一个包含一个条目的数组,但该条目的索引是 500,那么AvailableItems.length将返回 501,即使数组中只有一个条目。

只要您不需要使用该length功能,此解决方案应该适合您。

于 2012-05-01T15:15:42.890 回答
1

AvailableItem如果您能够通过仅通过其 ID 对其进行寻址而无需遍历整个数组来获得任意值(如果您有一个基于索引的数组,其中 ID 是索引),那么您可以通过SelectedItems并检查它是否存在于 中AvailableItems,如果然后将其SelecteItem转换为对象并将其添加到某个临时数组以供以后使用。

于 2012-05-01T15:15:28.857 回答