Можешь объяснить ключевые различия между методами массивов `map()`, `forEach()`, `filter()` и `reduce()` в JavaScript, включая их возвращаемые значения и основные варианты использования? — ДейлиПреп