Решение 1. Без побочных эффектов.
Может быть, reduce - единственный метод Array, который предоставляет массив и может возвращать произвольное значение, поэтому вы можете использовать его:
[1,2,3]
.filter(isDivisibleByTen)
.reduce((_1, _2, _3, array) => array, 'defaultValue');
Это решение немного затрачивает процессорное время (циклы обходятся без массива), но его можно легко комбинировать с любой цепочкой.
Решение 2. Элегантное решение.
Вы можете добавить пользовательский метод в прототип Array, чтобы сделать его доступным в цепочке:
Array.prototype.filledOrDefault = function(defaultValue) {
return this.length ? this : defaultValue;
}
[1,2,3]
.filter(isDivisibleByTen)
.filledOrDefault('defaultValue');
Это решение не рекомендуется, поскольку оно изменяет глобальное значение (Array
), которое используетсядругие скрипты на странице.