筛选数组中45,000个条目的最快,最有效的方法是什么?

时间:2019-06-20 04:25:06

标签: javascript arrays object

我想过滤仅从股票(“普通股”)以及纽约证券交易所和纳斯达克交易所中选择的数组中的条目。我在数组中有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')
))

1 个答案:

答案 0 :(得分:2)

Array.prototype.filter()是执行此操作的标准方法。除了性能之外,您还应该考虑代码的可读性和可维护性,因此,即使您可以做其他事情,对于共享代码库,这可能也是最佳选择。

除此之外,查看您的代码,我看不出有什么可以做得更快。 .filter()中的关键考虑因素之一是过滤功能。正是基于此,您应该评估您使用的条件以使其更快。从提供的示例中可以看出,您已经在使用带有两个条件的AND(&&)运算符,而且顺序似乎还不错。但是,如果您说5个条件,则应尝试使条件评估短路,以使AND运算符中的第一个条件是最常返回false的条件。

此外,正如其他人在评论中提到的那样,该数据似乎是从其他地方(即数据库)生成或检索的。您甚至可以在检索数据之前尝试进行排序和/或过滤,因为与此数据相关的其他成本都在客户端的计算机或服务器上(用于存储的内存,用于过滤的CPU等)。

最后,您可以尝试将数组拆分为两个数组-或这样检索它-并尝试使用async-await或保证并行过滤它们。这可能更快,但是您需要谨慎处理,因为它与您现在拥有的有点不同。