Мои два цента: в целом, я предпочитаю работать с массивами по функциональному принципу, поскольку я считаю, что функциональные методы более гибкие, их легче читать и обслуживать.
Особенно там, где производительность не критична или нетt заметных отличий.
Допустим, что функциональный способ занимает в 50 раз больше времени обычного цикла.Если обычный цикл занимает 1 мс, это означает, что функционал занимает 50 мс, и в большинстве случаев это нормально.
Так что я бы не стал жертвовать своим кодом для оптимизации в этом случае, особенно в приложении и / илирасшаренное репо.
Однако, когда я кодирую видеоигры, я обычно пытаюсь сделать обычный цикл.И по соображениям производительности, но и потому, что в этом контексте обычно приходится иметь дело с массивами байтов, и я считаю, что функциональное программирование менее гибкое.
Сказал, что: в JS проблема метода массива заключается в том, что они не 'лень.Это означает, что в вашем случае вы повторяете массив дважды, потому что вызываете два метода (filter
и map
).В других языках (например, Rust) такой метод «ленив», и он не вызывается до тех пор, пока вы действительно не сделаете что-то с итератором: это уменьшит проблему производительности, которую вы можете сравнить с обычным циклом.
Тамявляются библиотекой в JS, которая поддерживает ленивые методы (например, RxJS для наблюдаемых), поэтому вы можете проверить их, если ищете что-то посередине (сэкономив немного производительности, все еще используя функциональный подход).