Какой самый быстрый и эффективный способ фильтрации 45 000 записей в массиве? - PullRequest
1 голос
/ 20 июня 2019

Я хотел бы отфильтровать записи в массиве, который выбирается только из акций («Обыкновенные акции»), а также в биржах NYSE и NASDAQ.У меня есть 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 Ответ

2 голосов
/ 20 июня 2019

Array.prototype.filter() - это стандартный и обычный способ сделать это.Вы должны учитывать удобочитаемость и удобство сопровождения кода, помимо производительности, поэтому, даже если вы могли бы заняться чем-то другим, это, вероятно, лучший вариант для общей базы кода.

Помимо этого, глядя на ваш код, я нея действительно вижу многое, что можно сделать, чтобы сделать это быстрее.Одним из ключевых факторов в .filter() является функция фильтрации.Исходя из этого, вы должны оценить состояние, которое вы используете, чтобы сделать его быстрее.Насколько я могу судить из приведенного примера, вы уже используете оператор AND (&&) с парой условий, и кажется, что порядок в порядке.Однако, если у вас есть, скажем, 5 условий, вы должны попытаться замкнуть оценку состояния так, чтобы первое условие в вашем операторе AND было тем, которое чаще всего возвращает false.

Кроме того, как это делают другиеУпомянутые в комментариях эти данные, похоже, генерируются или извлекаются из других источников (например, из базы данных).Вы можете попробовать упорядочить и / или отфильтровать данные еще до того, как получите данные, так как существуют другие затраты, связанные с тем, что эти данные находятся на компьютере клиента или даже на сервере (память для хранения, процессор для фильтрации и т. Д.).

Наконец, вы можете попытаться разделить массив на два массива - или получить его как таковой - и попробовать использовать async - await или обещания фильтровать их параллельно.Это может быть быстрее, но вы должны обращаться с этим осторожно, поскольку это немного отличается от того, что у вас есть сейчас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...