【问题标题】:how to spread with reduce by recursion如何通过递归减少传播
【发布时间】:2019-02-05 00:18:36
【问题描述】:

这里是for循环方法,我想要的结果与下面的代码相同

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

如何以递归方式使用reduce和传播语法, 我遇到了一些错误,当我递归使用reduce 时,concat 函数被调用为无效 这是代码,

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

reduce(one) 的输出是[ 10000, 20 ]

【问题讨论】:

    标签: javascript arrays loops


    【解决方案1】:

    确保reduce处理程序总是返回数组,看到处理程序期望ar是一个数组。如果在reduce 处理程序中返回undefined,它将作为ar 传递到下一个reduce 迭代,这就是您遇到错误的原因。

    另外,请确保在返回之前定义了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));

    【讨论】:

    • 好的,你刚刚编辑了它,所以对于这种情况,我们应该在 reduce 中设置条件?我们不能为此使用传播?
    • @ZumDummi 刚刚根据我对您帖子的理解更新了答案 - 这有帮助吗?
    • 对于我想要的输出二和三,它应该是 `[ 5000, 2000, 2000 ]` 用于拖曳和`[ 500, 200, 200 ]` 用于三个
    • @ZumDummi 如果你觉得它有用,请考虑接受这个答案:-)
    猜你喜欢
    • 1970-01-01
    • 2019-09-15
    • 2015-08-22
    • 2019-03-20
    • 2011-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-02
    相关资源
    最近更新 更多