Skip to content

Latest commit

 

History

History
68 lines (46 loc) · 1.73 KB

M2A_25.md

File metadata and controls

68 lines (46 loc) · 1.73 KB

M2#A25 - TDD - reduce right

Reaproveitamando o código

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

Implementando o reduceRight

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

Teste

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)
})