[英]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);
}
使用map
, forEach
循環進行解構。
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));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.