javascript将int数组转换为对象数组

时间:2012-05-01 15:08:14

标签: javascript performance

我有一组名为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

感谢。

2 个答案:

答案 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转换为对象并将其添加到某个临时数组中供以后使用。