Object.assign递归不能按预期工作

时间:2018-03-10 19:35:08

标签: javascript recursion functional-programming

我有以下功能:

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有什么问题?

2 个答案:

答案 0 :(得分:1)

唯一可行的方法是将数组作为结果。

这是一个可能的解决方案:

&#13;
&#13;
function test(length) {
  return [...Array(length).keys()]
    .map(i => ({value: i + 1, label: i + 1}))
}

console.log(test(5));
&#13;
&#13;
&#13;

答案 1 :(得分:0)

如果你想在这里递归:

 const test = (i, o) => (i ? test(i - 1, o) : []).concat(Object.assign({}, o, { value: i, label: i }));