销毁对象的javascript嵌套数组

问题描述 投票:0回答:1

答案是一个对象数组,我需要过滤以实现所需的输出。

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"
     }

感谢任何帮助

javascript arrays ecmascript-6 javascript-objects destructuring
1个回答
0
投票

您可以使用.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"
  }
]
© www.soinside.com 2019 - 2024. All rights reserved.