【问题标题】:Adding values to object inside array not working - cannot set property of undefined向数组内的对象添加值不起作用 - 无法设置未定义的属性
【发布时间】:2022-11-17 11:05:17
【问题描述】:

我正在尝试转换从 CSV 文件构建的 JSON

[
    {
      "id_familia": 15,
      "relacao": 1,
      "occupation": "RESPONSAVEL",
      "parent_id": null,
      "id": 1547,
      "name": "name resp 1",
      "surname": "surname resp 1",
    },
    {
        "id_familia": 15,
        "relacao": 2,
        "occupation": "DEPENDENTE",
        "parent_id": 15,
        "id": 1548,
        "name": "name dep 1",
        "surname": "surname dep 1",
      },
      {
        "id_familia": 15,
        "relacao": 2,
        "occupation": "DEPENDENTE",
        "parent_id": 15,
        "id": 1549,
        "name": "name dep 2",
        "surname": "surname dep 2",
      },
    {
      "id_familia": 20,
      "relacao": 1,
      "occupation": "RESPONSAVEL",
      "parent_id": null,
      "id": 1178,
      "name": "name resp 2",
      "surname": "PAPARELLA",
    },
    {
      "id_familia": 20,
      "relacao": 1,
      "occupation": "CONJUGE",
      "parent_id": 20,
      "id": 2010,
      "name": "name dep 1",
      "surname": "surname dep 1",
    },
    {
      "id_familia": 20,
      "relacao": 2,
      "occupation": "DEPENDENTE",
      "parent_id": 20,
      "id": 1188,
      "name": "name dep 2",
      "surname": "surname dep 2",
    }
  ]

我需要创建一个需要提供以下结果的嵌套 JSON:

[
  {
    "responsible": {
      "id": "1547",
      "id_familia": 15,
      "name": "name resp 1",
      "surname": "surname resp 1",
    },
    "dependents": [
      {
        "member": {
          "id": "1548",
          "id_familia": 15,
          "name": "name dep 1",
          "surname": "surname dep 1",
          "activities": [],
          "programs": []
        }
      },
      {
        "member": {
          "id": "1549",
          "id_familia": 15,
          "name": "name dep 2",
          "surname": "surname dep 2",
          "activities": [],
          "programs": []
        }
      }
    ]
  },
  {
    "responsible": {
      "id": "1178",
      "id_familia": 20,
      "name": "name resp 1",
      "surname": "surname resp 1",
    },
    "dependents": [
      {
        "member": {
          "id": "2010",
          "id_familia": 20,
          "name": "name dep 1",
          "surname": "surname dep 1",
          "activities": [],
          "programs": []
        }
      },
      {
        "member": {
          "id": "1188",
          "id_familia": 20,
          "name": "name dep 2",
          "surname": "surname dep 2",
          "activities": [],
          "programs": []
        }
      }
    ]
  }
]

我的代码如下。

const data = [
    {
      "id_familia": 15,
      "relacao": 1,
      "occupation": "RESPONSAVEL",
      "parent_id": null,
      "id": 1547,
      "name": "name resp 1",
      "surname": "surname resp 1",
    },
    {
        "id_familia": 15,
        "relacao": 2,
        "occupation": "DEPENDENTE",
        "parent_id": 15,
        "id": 1548,
        "name": "name dep 1",
        "surname": "surname dep 1",
      },
      {
        "id_familia": 15,
        "relacao": 2,
        "occupation": "DEPENDENTE",
        "parent_id": 15,
        "id": 1548,
        "name": "name dep 2",
        "surname": "surname dep 2",
      },
    {
      "id_familia": 20,
      "relacao": 1,
      "occupation": "RESPONSAVEL",
      "parent_id": null,
      "id": 1178,
      "name": "name resp 2",
      "surname": "PAPARELLA",
    },
    {
      "id_familia": 20,
      "relacao": 1,
      "occupation": "CONJUGE",
      "parent_id": 20,
      "id": 2010,
      "name": "name dep 1",
      "surname": "surname dep 1",
    },
    {
      "id_familia": 20,
      "relacao": 2,
      "occupation": "DEPENDENTE",
      "parent_id": 20,
      "id": 1188,
      "name": "name dep 2",
      "surname": "surname dep 2",
    }
  ]


var data1 = [
    {
        resp:{},
        dependents:[
            {
                member:[],
                programs:[],
                activities:[],
            }
        ],
    },
] 

var respCont = -1
var depCont = 0

for (let index = 0; index < data.length; index++) {
    const element = data[index];
    if(data[index].occupation == "RESPONSAVEL") {
        respCont++ //adds one to resp index
        memberCont = 0
        data1[respCont].resp.id = {
            id: element.id,
            id_familia: element.id_familia,
            name: element.name,
            surname: element.surname,
        }
    } else {
        data1[respCont].dependents[0].member[memberCont].push(
            {
                id: element.id,
                id_familia: element.id_familia,
                name: element.name,
                surname: element.surname,                
            }
        )
        memberCont++ //adds one to member index
    }
}

我得到的错误是类型错误:无法读取未定义的属性“resp”我不知道是什么导致了错误,似乎该属性未定义,但我找不到解决方案。如果有人可以看看并帮助我解决这个问题,我将不胜感激。

非常感谢!

吉内斯

【问题讨论】:

    标签: javascript arrays object properties undefined


    【解决方案1】:

    正如您在这一行中看到的,您正在访问 data1[respCount],但 respCount 最初为 -1,并且 javascript 不支持像 python 那样的负索引。请根据您的需要修改您的代码。要从具有负值的 respCount 结尾相对地获取索引,就像 data1.length + respCount

    data1[respCont].dependents[0].member[memberCont].push()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-22
      • 2020-03-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多