[英]Destruct nested array of objects javascript
Answers is a array of objects, and i need to filter to achieve a desired output. 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"
}
}
}
]
}
]
I must create a Key[data.statement] : Value[data.answer.value] for each data object inside the survey property array.我必须为调查属性数组中的每个数据对象创建一个Key[data.statement] : Value[data.answer.value] 。
Desired output:期望的输出:
[
{
"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"
}
]
I tried two approaches, one using map:我尝试了两种方法,一种使用地图:
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
};
})
}));
Output:输出:
[{
"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"
}
]
}
]
And another aproach using destructuring, that is a amazing but i couldnt figure out how to loop inside of the survey array.还有另一种使用解构的方法,这是一个了不起的方法,但我无法弄清楚如何在调查数组内部循环。
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}
Output:输出:
{
"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"
}
Appreciate any help感谢任何帮助
You can do it with .map()
and then with .forEach()
inside this:你可以用
.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; }
Output:输出:
[
{
"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"
}
]
You could just be very explicit about it, if you wanted.如果你愿意,你可以非常明确地说明它。 This works, is very straightforward to read and understand, and doesn't take very many lines of code.
这是有效的,非常易于阅读和理解,并且不需要很多代码行。
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);
}
Use map
, forEach
loop with destructuring.使用
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.