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