这里是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))
如何使用减少和递归的方式利用扩展语法,我得到了一些错误,并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 ]
确保降低处理器总是返回数组,眼看处理器期望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));