破坏嵌套的对象数组 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);
}
使用 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));
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));