破坏嵌套的对象数组 javascript

Destruct nested array of objects javascript

Answers 是一个对象数组,我需要进行过滤以获得所需的输出。

const answers = [
    {   

        "surveyVersion": "5",
        "id": "550259bd-2164-4f5b-b477-49cd2afc5829",
        "surveyId": "123ebeff-9b48-4637-ac63-f0fce9f1abb8",
        "surveyName": "Compass",
        "createdAt": 1585244952251,
        "survey": [
            {
                "data": {
                    "statement": "De 0 a 10, qual a chance de você RECOMENDAR o Compass?",
                    "answer": {
                        "label": "7",
                        "value": "7"
                    }
                }
            },
            {
                "data": {
                    "statement": "De 0 a 10, qual a nota voce dar para a qualidade do atendimento?",
                    "answer": {
                        "label": "7",
                        "value": "6"
                    }
                }
            },
            {
                "data": {
                    "statement": "De 0 a 10, qual a nota voce da para o interior o Compass?",
                    "answer": {
                        "label": "7",
                        "value": "8"
                    }
                }
            }
        ]

    },
    {   

        "surveyVersion": "5",
        "id": "c720e777-5085-4493-bed9-c70bc311f47d",
        "surveyId": "123ebeff-9b48-4637-ac63-f0fce9f1abb8",
        "surveyName": "Compass",
        "createdAt": 1585244952251,
        "survey": [
            {
                "data": {
                    "statement": "De 0 a 10, qual a chance de você RECOMENDAR o Compass?",
                    "answer": {
                        "label": "7",
                        "value": "3"
                    }
                }
            },
            {
                "data": {
                    "statement": "De 0 a 10, qual a nota voce dar para a qualidade do atendimento?",
                    "answer": {
                        "label": "7",
                        "value": "4"
                    }
                }
            },
            {
                "data": {
                    "statement": "De 0 a 10, qual a nota voce da para o interior o Compass?",
                    "answer": {
                        "label": "7",
                        "value": "5"
                    }
                }
            }
        ]

    }
]

我必须为每个数据对象创建一个 Key[data.statement]:Value[data.answer.value]在调查 属性 数组中。

期望的输出:

[
   {   

       "surveyVersion": "5",
       "id": "550259bd-2164-4f5b-b477-49cd2afc5829",
       "surveyId": "123ebeff-9b48-4637-ac63-f0fce9f1abb8",
       "surveyName": "Compass",
       "createdAt": 1585244952251,
       "De 0 a 10, qual a chance de você RECOMENDAR o Compass?":"7" ,
       "De 0 a 10, qual a nota voce dar para a qualidade do atendimento?":"6",
       "De 0 a 10, qual a nota voce da para o interior o Compass?":"8"


   },
   {   

       "surveyVersion": "5",
       "id": "c720e777-5085-4493-bed9-c70bc311f47d",
       "surveyId": "123ebeff-9b48-4637-ac63-f0fce9f1abb8",
       "surveyName": "Compass",
       "createdAt": 1585244952251,
        "De 0 a 10, qual a chance de você RECOMENDAR o Compass?":"3" ,
        "De 0 a 10, qual a nota voce dar para a qualidade do atendimento?":"4",
        "De 0 a 10, qual a nota voce da para o interior o Compass?":"5"

   }
]



我尝试了两种方法,一种使用地图:

 let values = answers.map(item => ({
        ...item,
        id: item.id,
        survey: item.surveyName,
        answer: item.survey.map(function(node) {
          return {
            [node.data.statement]: node.data.answer.value
          };
        })
      }));

输出:

[{
        "surveyName": "Compass",
        "createdAt": 1585244952251,
        "survey": "Compass",
        "surveyVersion": "5",
        "id": "550259bd-2164-4f5b-b477-49cd2afc5829",
        "surveyId": "123ebeff-9b48-4637-ac63-f0fce9f1abb8",
        "answer": [{
                "De 0 a 10, qual a chance de você RECOMENDAR o Compass?": "7"
            },
            {
                "De 0 a 10, qual a nota voce dar para a qualidade do atendimento?": "8"
            },
            {
                "De 0 a 10, qual a nota voce da para o interior o Compass?": "6"
            }
        ]

    },

    {
        "surveyName": "Compass",
        "createdAt": 1585244949217,
        "survey": "Compass",
        "surveyVersion": "4",
        "id": "5156be07-2dc4-47f6-b7c4-1fc5089db0b6",
        "surveyId": "123ebeff-9b48-4637-ac63-f0fce9f1abb8",
        "answer": [{
                "De 0 a 10, qual a chance de você RECOMENDAR o Compass?": "3"
            },
            {
                "De 0 a 10, qual a nota voce dar para a qualidade do atendimento?": "4"
            },
            {
                "De 0 a 10, qual a nota voce da para o interior o Compass?": "5"
            }
        ]

    }


]

还有另一种使用解构的方法,这很了不起,但我不知道如何在调查数组中循环。

for (const {id:id,surveyName:surveyName,surveyVersion:surveyVersion,surveyId:surveyId,createdAt:createdAt,survey:[{data:{statement,answer:{value}}}]} of answers)
  output = {id,surveyName,surveyVersion,surveyId,createdAt,statement:value}

输出:

{
         "id": "e233582b-06b7-4257-98a8-8e669a8a341d",
         "surveyName": "Compass",
         "surveyVersion": "1",
         "surveyId": "123ebeff-9b48-4637-ac63-f0fce9f1abb8",
         "createdAt": 158524492683,
         "statement": "De 0 a 10, qual a chance de você RECOMENDAR o Compass?",
         "value": "7"
     }

感谢任何帮助

你可以用 .map() 然后用 .forEach() 来完成:

const output = answers.map(child => {
  child.survey.forEach(item => child[item.data.statement] = item.data.answer.value);
  delete child.survey;
  return child;
})

console.log(output);

const answers = [
    {   

        "surveyVersion": "5",
        "id": "550259bd-2164-4f5b-b477-49cd2afc5829",
        "surveyId": "123ebeff-9b48-4637-ac63-f0fce9f1abb8",
        "surveyName": "Compass",
        "createdAt": 1585244952251,
        "survey": [
            {
                "data": {
                    "statement": "De 0 a 10, qual a chance de você RECOMENDAR o Compass?",
                    "answer": {
                        "label": "7",
                        "value": "7"
                    }
                }
            },
            {
                "data": {
                    "statement": "De 0 a 10, qual a nota voce dar para a qualidade do atendimento?",
                    "answer": {
                        "label": "7",
                        "value": "6"
                    }
                }
            },
            {
                "data": {
                    "statement": "De 0 a 10, qual a nota voce da para o interior o Compass?",
                    "answer": {
                        "label": "7",
                        "value": "8"
                    }
                }
            }
        ]

    },
    {   

        "surveyVersion": "5",
        "id": "c720e777-5085-4493-bed9-c70bc311f47d",
        "surveyId": "123ebeff-9b48-4637-ac63-f0fce9f1abb8",
        "surveyName": "Compass",
        "createdAt": 1585244952251,
        "survey": [
            {
                "data": {
                    "statement": "De 0 a 10, qual a chance de você RECOMENDAR o Compass?",
                    "answer": {
                        "label": "7",
                        "value": "3"
                    }
                }
            },
            {
                "data": {
                    "statement": "De 0 a 10, qual a nota voce dar para a qualidade do atendimento?",
                    "answer": {
                        "label": "7",
                        "value": "4"
                    }
                }
            },
            {
                "data": {
                    "statement": "De 0 a 10, qual a nota voce da para o interior o Compass?",
                    "answer": {
                        "label": "7",
                        "value": "5"
                    }
                }
            }
        ]

    }
]

const output = answers.map(child => {
  child.survey.forEach(item => child[item.data.statement] = item.data.answer.value);
  delete child.survey;
  return child;
})

console.log(output);
.as-console-wrapper { max-height: 100% !important; top: 0; }

输出:

[
  {
    "surveyVersion": "5",
    "id": "550259bd-2164-4f5b-b477-49cd2afc5829",
    "surveyId": "123ebeff-9b48-4637-ac63-f0fce9f1abb8",
    "surveyName": "Compass",
    "createdAt": 1585244952251,
    "De 0 a 10, qual a chance de você RECOMENDAR o Compass?": "7",
    "De 0 a 10, qual a nota voce dar para a qualidade do atendimento?": "6",
    "De 0 a 10, qual a nota voce da para o interior o Compass?": "8"
  },
  {
    "surveyVersion": "5",
    "id": "c720e777-5085-4493-bed9-c70bc311f47d",
    "surveyId": "123ebeff-9b48-4637-ac63-f0fce9f1abb8",
    "surveyName": "Compass",
    "createdAt": 1585244952251,
    "De 0 a 10, qual a chance de você RECOMENDAR o Compass?": "3",
    "De 0 a 10, qual a nota voce dar para a qualidade do atendimento?": "4",
    "De 0 a 10, qual a nota voce da para o interior o Compass?": "5"
  }
]

如果你愿意,你可以非常明确。这有效,非常易于阅读和理解,并且不需要太多代码行。

let values = [];

for (let ans of answers) {
    let item = {};
    item["surveyVersion"] =  ans["surveyVersion"]
    item["id"] = ans["surveyVersion"]
    item["surveyId"] = ans["surveyVersion"]
    item["surveyName"] = ans["surveyVersion"]
    item["createdAt"] = ans["surveyVersion"]
    for(let resp of ans.survey) {
        item[resp.data.statement] = resp.data.answer.value;
    }
    values.push(item);
}

使用 mapforEach 解构循环。

const updated = data =>
  data.map(({ survey, ...item }) => {
    survey.forEach(
      ({
        data: {
          statement,
          answer: { value }
        }
      }) => (item[statement] = value)
    );
    return item;
  });

const answers = [
  {
    surveyVersion: "5",
    id: "550259bd-2164-4f5b-b477-49cd2afc5829",
    surveyId: "123ebeff-9b48-4637-ac63-f0fce9f1abb8",
    surveyName: "Compass",
    createdAt: 1585244952251,
    survey: [
      {
        data: {
          statement: "De 0 a 10, qual a chance de você RECOMENDAR o Compass?",
          answer: {
            label: "7",
            value: "7"
          }
        }
      },
      {
        data: {
          statement:
            "De 0 a 10, qual a nota voce dar para a qualidade do atendimento?",
          answer: {
            label: "7",
            value: "6"
          }
        }
      },
      {
        data: {
          statement:
            "De 0 a 10, qual a nota voce da para o interior o Compass?",
          answer: {
            label: "7",
            value: "8"
          }
        }
      }
    ]
  },
  {
    surveyVersion: "5",
    id: "c720e777-5085-4493-bed9-c70bc311f47d",
    surveyId: "123ebeff-9b48-4637-ac63-f0fce9f1abb8",
    surveyName: "Compass",
    createdAt: 1585244952251,
    survey: [
      {
        data: {
          statement: "De 0 a 10, qual a chance de você RECOMENDAR o Compass?",
          answer: {
            label: "7",
            value: "3"
          }
        }
      },
      {
        data: {
          statement:
            "De 0 a 10, qual a nota voce dar para a qualidade do atendimento?",
          answer: {
            label: "7",
            value: "4"
          }
        }
      },
      {
        data: {
          statement:
            "De 0 a 10, qual a nota voce da para o interior o Compass?",
          answer: {
            label: "7",
            value: "5"
          }
        }
      }
    ]
  }
];

console.log(updated(answers));