javascript - 减少函数给出“未捕获的类型错误:无法设置未定义的属性‘标题’”
问题描述
我正在尝试使用 reduce 函数在 javascript 中重塑 JSON 对象。
据我了解,每次在 javascript 中向对象添加新属性时,都必须将其声明为ac['new_object'] = {};
. 我正在这样做,所以我不明白为什么我会看到错误:Uncaught TypeError: Cannot set property 'title' of undefined
可重现的例子:
let field_list = [
{
"key": "id",
"val": {
"boost": 4
}
},
{
"key": "title",
"val": {
"boost": 4
}
}
]
field_list.reduce(function(ac, cu){
ac[cu.key] = {}
ac[cu.key] = cu.val
}, {})
我怎样才能正确地减少这个 JSON 对象?我的错误是什么?
目标格式:
{
tales: {
foo: {"id": 2},
bar: {"title": 1},
...
}
}
解决方案
不要忘记在函数末尾返回累加器对象:
field_list.reduce(function(ac, cu){
ac[cu.key] = {}
ac[cu.key] = cu.val
return ac; // <---- added return statement
}, {})
没有它,undefined
将隐式返回,因此循环的下一次迭代将ac
等于undefined
推荐阅读
- python-3.x - opencv关键点上的图像处理
- visual-studio-code - pylint E4010:无法导入“google.appengine.ext”
- python - Sympy 无法评估涉及伽马函数的无限和
- node.js - 如何在 Node.js 中管理 Cron 作业
- php - 在 Codeigniter Facebook\Facebook 类中找不到 Facebook 登录
- oracle - 在 APEX 应用程序中运行安装脚本时如何为所有者使用替换字符串?
- angular6 - 无法从导航栏导航到 Angular 6 组件
- c# - MS Graph - 401 未经授权看似具有适当的令牌和访问权限
- bash - 将视频从 60 FPS 转换为 25 FPS 而不会减慢它
- node.js - 异步渲染 EJS(先渲染然后数据)