【发布时间】:2018-08-19 04:09:24
【问题描述】:
我有以下功能:
const test = (i, o) => {
if (i < 1)
return o
else
return Object.assign(o, test(i - 1, ({
value: i,
label: i
})))
}
console.log(test(5, ({})))
而我除了打印:
[
{ value: '1', label: '1' },
{ value: '2', label: '2' },
{ value: '3', label: '3' },
{ value: '4', label: '4' },
{ value: '5', label: '5' }
]
但是结果是:
{ value: 1, label: 1 }
递归 Object.assign 有什么问题?
【问题讨论】:
-
你的函数有什么目的?
-
value和label不断被递归调用覆盖,因此您只能获得最深的值。如果那是您想要的,那么您不会创建一个数组。 -
把console.log放到else中
-
@connexo 我想构造一个具有向上计数值的大对象,我想稍后在 html 表中使用它。我知道我可以使用 for 循环来做到这一点,但是我认为递归应该是可能的,或者至少我不知道为什么它不应该使用递归。
-
仅供参考,您当然也可以使用递归来实现。你只是不需要
Object.assign来做到这一点。const test = (i, a) => { if (i < 1) return a else return a.concat(test(i - 1, a), {value:i, label:i}) } console.log(test(5, []))
标签: javascript recursion functional-programming