我想过滤仅从股票(“普通股”)以及纽约证券交易所和纳斯达克交易所中选择的数组中的条目。我在数组中有45,000个条目,并希望用JavaScript编写可以过滤最快,最有效方法的内容。
我已经尝试过.filter()
,并且一切正常。
const searchUSData = [
{
"Code":"^DJI",
"Name":"Dow Jones Industrial Average",
"Country":"USA",
"Exchange":"INDEX",
"Currency":"USD",
"Type":"Common Stock"
},
{
"Code":"AAAAX",
"Name":"DEUTSCHE REAL ASSETS FUND CLASS A",
"Country":"USA",
"Exchange":"NMFQS",
"Currency":"USD",
"Type":"Mutual Fund"
},
{
"Code":"AAAIF",
"Name":"Alternative Investment Trust",
"Country":"USA",
"Exchange":"OTCGREY",
"Currency":"USD",
"Type":"Common Stock"
},
{
"Code":"AACS",
"Name":"American Commerce Solutions, Inc",
"Country":"USA",
"Exchange":"PINK",
"Currency":"USD",
"Type":"Common Stock"
},
{
"Code":"AAAIX",
"Name":"STRATEGIC ALLOCATION: AGGRESSIVE FUND I CLASS",
"Country":"USA",
"Exchange":"NMFQS",
"Currency":"USD",
"Type":"Mutual Fund"
},
{
"Code":"AAALF",
"Name":"Aareal Bank AG",
"Country":"USA",
"Exchange":"PINK",
"Currency":"USD",
"Type":"Common Stock"
}
]
// Use only stocks
// Use only stocks and NYSE / NASDAQ
const filterStockSearch = searchUSData.filter((item) => (
item.Type === 'Common Stock' &&
(item.Exchange === 'NYSE MKT' || item.Exchange === 'NASDAQ')
))
答案 0 :(得分:2)
Array.prototype.filter()
是执行此操作的标准方法。除了性能之外,您还应该考虑代码的可读性和可维护性,因此,即使您可以做其他事情,对于共享代码库,这可能也是最佳选择。
除此之外,查看您的代码,我看不出有什么可以做得更快。 .filter()
中的关键考虑因素之一是过滤功能。正是基于此,您应该评估您使用的条件以使其更快。从提供的示例中可以看出,您已经在使用带有两个条件的AND(&&
)运算符,而且顺序似乎还不错。但是,如果您说5个条件,则应尝试使条件评估短路,以使AND运算符中的第一个条件是最常返回false
的条件。
此外,正如其他人在评论中提到的那样,该数据似乎是从其他地方(即数据库)生成或检索的。您甚至可以在检索数据之前尝试进行排序和/或过滤,因为与此数据相关的其他成本都在客户端的计算机或服务器上(用于存储的内存,用于过滤的CPU等)。
最后,您可以尝试将数组拆分为两个数组-或这样检索它-并尝试使用async
-await
或保证并行过滤它们。这可能更快,但是您需要谨慎处理,因为它与您现在拥有的有点不同。