У меня есть класс, который предоставляет способ перечисления некоторых значений (которые могут быть неправильно сохранены в массиве или другой встроенной коллекции):
class DataStore {
constructor(values) {
this.values = values;
}
forEachData(callback) {
// the callback is invoked with items specific to the logic of DataStore
callback(0);
callback(1);
for (const x of this.values) {
callback(x);
}
for (const x of this.values) {
callback(2 * x);
}
}
}
В другой функции, которая использует этот класс, я хотел бы выполнить некоторую операцию агрегации (то есть сокращения) для значений, возвращаемых обратным вызовом. Есть ли краткий способ выразить это с помощью Array.prototype.reduce () или каким-либо другим встроенным способом без выполнения сокращения вручную?
// Inside my function
const data_store = ...; // DataStore object
const aggregate_op = (accumulator, current_value) => Math.min(accumulator, f(current_value));
// I'm wondering if there is a built-in language or library feature that does this kind of reduction:
let answer = 0;
data_store.forEachData(x => {
answer = aggregate_op(answer, x);
});
Примечание. Сокращение вручную достаточно просто, как описано выше, но, возможно, сокращение массива также очень просто без использования Array.prototype.reduce ():
const arr = [1, 3, 5, 7, 9];
let answer = 0;
arr.forEach(x => {
answer = aggregate_op(answer, x);
});