Para reaproveitar o nosso código, fazemos da seguinte forma:
Criamos os arquivos: main-reduce.js
e reduce-right.js
Dentro de main-reduce.js
temos o método reduce
'use strict'
const mainReduce = (arr, func, initialValue) => {
let acc = initialValue
let arrCopy = arr
if(initialValue === undefined) {
acc = arr[0]
arrCopy = arr.slice(1)
}
for(var i = 0; i < arrCopy.length; i++){
acc = func(acc, arrCopy[i], i, arrCopy)
}
return acc
}
export default mainReduce
E dentro do arquivo reduce
chamamos a referência de main-reduce
para a nossa variável reduce
'use strict'
import mainReduce from './main-reduce'
const reduce = mainReduce
export default reduce
Dentro do arquivo reduce-right.js
importamos o método reverse
.
Criamos a função reduceRight
passando como primeiro argumento o array
e todos os outros argumentos que são padrões (func, initialValue) mais para não precisarmos ter que digitar tudo utilizamos o operador rest params (...params) e retornamos a função mainReduce
passando como primeiro argumento o array reverso e o restante dos parâmetros passados como argumentos da funão reduceRight
.
'use strict'
import mainReduce from './main-reduce'
import reverse from './reverse/reverse'
const reduceRight = (arr, ...params) => mainReduce(reverse(arr), ...params)
export default reduceRight
it('reduceRight(["úna", "ra", "ba"], (acc, item) => acc + item, "") should return "baraúna"', () => {
const before = reduceRight(["úna", "ra", "ba"], (acc, item) => acc + item, '');
const after = 'baraúna'
expect(before).to.be.equal(after)
})