Некоторое время назад я разместил вопрос о StackOverflow, показывающий, что встроенная реализация reduceRight в JavaScript раздражает. Следовательно, я создал функцию стиля foldr в стиле Haskell как средство:
function foldr(array, callback, initial) {
var length = array.length;
if (arguments.length < 3) {
if (length > 0) var result = array[--length];
else throw new Error("Reduce of empty array with no initial value");
} else var result = initial;
while (length > 0) {
var index = --length;
result = callback(array[index], result, index, array);
}
return result;
}
Однако я никогда не использовал эту функцию foldr просто потому, что мне никогда не нужно было перебирать массив справа налево. Это заставило меня задуматься, почему я не использую foldr в JavaScript столько, сколько я делаю в Haskell, и какие примеры реальных примеров использования foldr в JavaScript?
Я мог ошибаться, но я считаю, что функция foldr широко используется в Haskell из-за:
- Lazy Evaluation (foldl является хвостом рекурсивным, так как же foldr работает быстрее, чем foldl?)
- Сплав с коротким вырезом с использованием
foldr/build( Правильность слияния коротких фракций:foldr/build)
Это объясняет, почему foldr или reduceRight широко не используются в JavaScript. Я еще не видел реальное использование foldr в реальном мире только для его итерации справа налево.
Это подводит меня к двум моим вопросам:
- Каковы некоторые реальные примеры использования
reduceRightв JavaScript? Возможно, вы использовали его в пакете npm. Было бы здорово, если бы вы могли связать меня с вашим кодом и объяснить, почему вам нужно использоватьreduceRightвместоreduce. - Почему
reduceRightне используется так широко, какreduceв JavaScript? Я уже предоставил свои два цента по этому вопросу. Я считаю, чтоfoldrв основном используется только для его лени, поэтомуreduceRightне очень полезен в JavaScript. Однако я мог ошибаться.
Для первого вопроса я попытался найти примеры реальных примеров использования reduceRight в JavaScript. Однако я не нашел удовлетворительных ответов. Единственные примеры, которые я нашел, были тривиальными и теоретическими:
когда использовать reduce и reduceRight?
То, что я ищу, является практическим примером. Когда целесообразно использовать reduceRight в JavaScript вместо reduce?
По второму вопросу, я понимаю, что это прежде всего мнение, основанное на том, почему это хорошо, если вы не отвечаете на него. Основное внимание в этой статье уделяется первому вопросу, а не второму.