我正在尝试使用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},
...
}
}
答案 0 :(得分:4)
别忘了在函数末尾返回累加器对象:
field_list.reduce(function(ac, cu){
ac[cu.key] = {}
ac[cu.key] = cu.val
return ac; // <---- added return statement
}, {})
否则,将undefined
隐式返回,因此循环的下一次迭代将使ac
等于undefined