как распространять с помощью рекурсии - PullRequest
0 голосов
/ 05 февраля 2019

здесь для метода цикла, и результат, который я хочу, такой же, как и для приведенного ниже кода, также

function reduce (dollars) {
  let arr = [];
  let change = [10000,5000,2000,1000,500,200,100,50,20,10,1];

  if(dollars === 0) return arr
  for(key of change){
    if(key <= dollars) return arr.concat(key).concat(reduce (dollars -= key));
  }
}

console.log(reduce(900))
console.log(reduce(9000))

как использовать редукцию и использование синтаксиса спреда рекурсивным способом, я получил некоторую ошибку, и функция concat вызывается не как функция, когда я использую reduce рекурсивно здеськод,

function reduce(dollar) {
  let change = [10000,5000,2000,1000,500,200,100,50,20,10,1];
  if(dollar === 0) return c
  let c = change.reduce((ar, el) => {
    if(dollar >= el) {
      return ar.concat(el).concat(reduce(dollar-=el))
    }
  }, [])
}
let [ one, two, three] = [10020,9000,900];
console.log(reduce(one));
console.log(reduce(two));
console.log(reduce(three));

Выход для уменьшения (один) составляет [ 10000, 20 ]

1 Ответ

0 голосов
/ 05 февраля 2019

Убедитесь, что обработчик Reduce всегда возвращает массив, так как обработчик ожидает, что ar будет массивом.Если в обработчике редукции возвращается undefined, он будет передан следующей итерации редукции как ar, что является причиной ошибки, которую вы получаете.

Кроме того, убедитесь, что c определен перед его возвратом, или измените код, как показано ниже, чтобы избежать необходимости в c полностью:

function reduce(dollar) {

  let change = [10000,5000,2000,1000,500,200,100,50,20,10,1];
  
  /* if dollar === 0 then return [] */
  if (dollar === 0) return [];      
    
  /* Return reduced result (ie "c" in original code) */
  return change.reduce((ar, el) => {
        
    /*
    While el deducted from dollar yields positive value,
    */
    while (dollar - el >= 0) {
      
      /*
      then decrement dollar amout by current el and,
      */
      dollar -= el;  
      
      /*
      add el to current result
      */
      ar = ar.concat(el)
    }
    
    /*
    Return resulting ar array
    */
    return ar;
    
  }, [])
}

let [ one, two, three ] = [ 10020, 9000, 900 ];
console.log(reduce(one));
console.log(reduce(two));
console.log(reduce(three));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...