我有一组名为SelectedItems
的整数。我有另一个数组,其中包含被称为AvailableItems
的对象,并且是从json解析的;这些Item
个对象具有属性{ContainerID, ContainerName, ItemID, ItemName}
。
我想将SelectedItems
从int数组转换为Items
数组,其中每个ItemID
都替换为与{{1}对应的Item
对象在ItemID
中。 AvailableItems
中的每个ItemID
都是唯一的。
我从2个循环开始:一个循环遍历SelectedItems
的每个元素但后来我发现自己循环遍历SelectedItems
每次都找到对应的AvailableItems
我需要的对象键复制到ItemID
。
所以基本上我构建了一个看似非常低效的循环。我想知道是否有一种更好的方法可以通过避免循环内的重复循环来实现它?
示例数据:
对于SelectedItems
,您有
AvailableItems
with可能是1,000个对象,然后{
ContainerID: i,
ContainerName: 'SomeName',
ItemID: j,
ItemName: 'SomeOtherName'
}
是整数数组
SelectedItems
感谢。
答案 0 :(得分:2)
您可以将数字数组AvailableItems
中的每个对象放在与其ItemID
匹配的索引处。
因此,您知道ItemID
为5的项目位于AvailableItems[5]
,而不必循环查找。
如果您在不同的ItemID
值之间存在较大差距,则不确定会产生什么影响,但您可以尝试一下,看看它是否运作良好。
<强>更新强>
快速搜索并阅读this answer后,看起来索引之间的间隙不会浪费大量内存。但是,它会影响检查AvailableItems.length
的结果。如果您有一个包含一个条目的数组,但该条目的索引是500,那么AvailableItems.length
将返回501,即使数组中只有一个条目。
只要您不需要使用length
功能,此解决方案就适合您。
答案 1 :(得分:1)
如果你能够得到任意AvailableItem
而没有遍历整个数组,只需通过它的ID来寻址它(如果你有一个基于索引的数组,其中ID是索引)那么你可以通过{ {1}}并检查它是否存在于SelectedItems
中,如果存在,则将AvailableItems
转换为对象并将其添加到某个临时数组中供以后使用。