代码之家  ›  专栏  ›  技术社区  ›  Preston

reduce函数给出“Uncaught TypeError:无法设置未定义的属性'title'”

  •  -1
  • Preston  · 技术社区  · 6 年前

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

    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 回复  |  直到 6 年前
        1
  •  10
  •   Nicholas Tower    6 年前

    别忘了在函数末尾返回accumulator对象:

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

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