减少功能,给出“未捕获的TypeError:无法设置未定义的属性'title'”

时间:2018-09-26 14:37:41

标签: javascript

我正在尝试使用reduce函数在javascript中重塑JSON对象。

据我了解,每次将新属性添加到javascript对象中时,都必须像ac['new_object'] = {};那样声明它。我正在这样做,所以我不明白为什么会看到错误:Uncaught TypeError: Cannot set property 'title' of undefined

可复制的示例:

my_json = JSON.parse('[{"key":"id","val":{"boost":4}},{"key":"title","val":{"boost":4}},{"key":"plot","val":{"boost":3}},{"key":"actor","val":{"boost":2}}]')
console.log(
  field_list.reduce(function(ac, cu){
    ac[cu.key] = {}
    ac[cu.key] = cu.val
  }, {})
)

如何正确减少此JSON对象?我这是什么错误?

目标格式:

{
    tales: {
        foo: {"id": 2},
        bar: {"title": 1},
        ...
    }
}

1 个答案:

答案 0 :(得分:4)

别忘了在函数末尾返回累加器对象:

field_list.reduce(function(ac, cu){
  ac[cu.key] = {}
  ac[cu.key] = cu.val
  return ac; // <---- added return statement
}, {})

否则,将undefined隐式返回,因此循环的下一次迭代将使ac等于undefined