This is a great option for reduce :
transform(input, transformers: Transform<Item>[]) { const items: Item[] = getItems(input); return items.map(item => transformers.reduce((val, transformer) => transformer(val), item)); }
Or perhaps more readably:
transform(input, transformers: Transform<Item>[]) { const items: Item[] = getItems(input); return items.map( item => transformers.reduce( (val, transformer) => transformer(val), item ) ); }
Live example:
function getItems(input) { return [ "abcdefg", "1234567" ]; } function transform(input, transformers) { const items = getItems(input); return items.map(item => transformers.reduce((val, transformer) => transformer(val), item)); } const result = transform("x", [ v => v.toUpperCase(), v => v.substring(1, v.length - 1) ]); console.log(result);
As Nitzan Tomer points out, we could end the items constant:
transform(input, transformers: Transform<Item>[]) { return getItems(input).map( item => transformers.reduce( (val, transformer) => transformer(val), item ) ); }
I often use these things for debugging, but some good debuggers can now easily see the return value of functions before returning them (Chrome does), so if you deleted it, you can go to getItems before see the elements in front of the map .
source share