Javascript在for循环中创建数组

Sta*_*son 0 javascript

我有一个json数组,格式如下.

{
  "agents": [{
      "id": "1",
      "first_name": "Stacy",
      "last_name": "Thompson",
      "fields": [{
        "name": "workphone",
        "values": {
          "answer": "8888888888"
        }
      }, {
        "name": "Industry",
        "values": {
          "answer": "computer"
        }
      }]
    },
    {
      "id": "2",
      "first_name": "Jhon",
      "last_name": "Deo",
      "fields": [{
          "name": "workphone",
          "values": {
            "answer": "9999999999"
          }
        },
        {
          "name": "market",
          "values": {
            "answer": "Outer"
          }
        }
      ]
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

我想将它转换为更简单的数组,如下所示,因此搜索更容易:

{
  "agents": [{
    "id": "1",
    "first_name": "Stacy",
    "last_name": "Thompson",
    "workphone": "8888888888",
    "Industry": "computer"
  }, {
    "id": "2",
    "first_name": "Jhon",
    "last_name": "Deo",
    "workphone": "9999999999",
    "market": "Outer"
  }]
}
Run Code Online (Sandbox Code Playgroud)

我编写了如下代码,但我收到了错误

TypeError: Cannot set property 'id' of undefined
Run Code Online (Sandbox Code Playgroud)

这是代码:

    let temp = response.data.agents;
    let temparray=[];
    for(let i = 0; i < temp.length; i++) {
      let agent = temp[i];
      Object.keys(agent).forEach(function(key) {
          if(key=='fields'){
             let tempfield =  agent.fields;
             for(let j = 0; j < tempfield.length; j++) {
                 let ccs = tempfield[j];
                 Object.keys(ccs).forEach(function(keys) {
                 if(keys=='name'){
                     temparray[i][ccs.name] = ccs.values.answer;
                 }

              });
            }
          }
        else{
         temparray[i][key] = agent[key];
         });
  } 
Run Code Online (Sandbox Code Playgroud)

cha*_*tfl 7

这是一个map和reduce方法,使用对象解构来拆分fields,以便减少然后可以与其他属性合并的平坦对象

data.agents = data.agents.map(({fields, ...rest}) => {
   fields = fields.reduce((a,{name:n,values:v}) => (a[n] = v.answer, a),{});
   return {...rest, ...fields};
});

console.log(data)
Run Code Online (Sandbox Code Playgroud)
<script>
  let data = {
    "agents": [{
        "id": "1",
        "first_name": "Stacy",
        "last_name": "Thompson",
        "fields": [{
          "name": "workphone",
          "values": {
            "answer": "8888888888"
          }
        }, {
          "name": "Industry",
          "values": {
            "answer": "computer"
          }
        }]
      },
      {
        "id": "2",
        "first_name": "Jhon",
        "last_name": "Deo",
        "fields": [{
            "name": "workphone",
            "values": {
              "answer": "9999999999"
            }
          },
          {
            "name": "market",
            "values": {
              "answer": "Outer"
            }
          }
        ]
      }
    ]
  }
</script>
Run Code Online (Sandbox Code Playgroud)