我有一个来自后端的对象数组。
[
[
{
"question_id": "565",
"option_type": "1",
"question_image": "",
"option_number": "4",
"correct_answer": "d",
"marks": "4",
"language": "Hindi",
"skill_id": "",
"nos_id": "29",
"question": "वितरण लाइन के लिए प्रयुक्त प्रतीक को पहचानें",
"options": [
{
"image": "",
"option": "मौजूदा लाइन",
"checked": false
},
{
"image": "",
"option": "योजनाबद्ध लाइन",
"checked": false
},
{
"image": "",
"option": "भूमिगत लाइन",
"checked": false
},
{
"image": "",
"option": "ओवरहेड लाइन",
"checked": false
}
]
},
{
"question_id": "565",
"option_type": "1",
"question_image": "",
"option_number": "4",
"correct_answer": "d",
"marks": "4",
"language": "English",
"skill_id": "",
"nos_id": "29",
"question": "Identify the symbol used for distribution line",
"options": [
{
"image": "",
"option": "E O 1",
"checked": false
},
{
"image": "",
"option": "E O 2",
"checked": false
},
{
"image": "",
"option": "E O 3",
"checked": false
},
{
"image": "",
"option": "E O 4",
"checked": false
}
]
}
],
[
{
"question_id": "625",
"option_type": "1",
"question_image": "",
"option_number": "4",
"correct_answer": "b",
"marks": "5",
"language": "Hindi",
"skill_id": "",
"nos_id": "34",
"question": "निम्नलिखित में से कौन सी न्यूनतम ऊंचाई है जिससे ऊपर सुरक्षा बेल्ट पहनना चाहिए?",
"options": [
{
"image": "",
"option": "३ मीटर",
"checked": false
},
{
"image": "",
"option": "२ मीटर ",
"checked": false
},
{
"image": "",
"option": "४ मीटर ",
"checked": false
},
{
"image": "",
"option": "१ मीटर ",
"checked": false
}
]
},
{
"question_id": "625",
"option_type": "1",
"question_image": "",
"option_number": "4",
"correct_answer": "b",
"marks": "5",
"language": "English",
"skill_id": "",
"nos_id": "34",
"question": "Which of the following is the minimum height at which a safety belt must be worn? ",
"options": [
{
"image": "",
"option": "English option 1",
"checked": false
},
{
"image": "",
"option": "English option 2",
"checked": false
},
{
"image": "",
"option": "English option 3",
"checked": false
},
{
"image": "",
"option": "English option 4",
"checked": false
}
]
}
]
]我想组合内部数组的对象,获得一个单独的对象数组,并将问题和选项组合成一个对象,如下所示:
question: {
english: "Identify the symbol used for distribution line"
hindi: "वितरण लाइन के लिए प्रयुक्त प्रतीक को पहचानें"
}
"options": [
{
"image": "",
"option": {
"english: "English option 1",
"hindi: "३ मीटर"
},
"checked": false
},
{
"image": "",
"option": {
"english: "English option 2",
"hindi: "२ मीटर "
},
"checked": false
},
{
"image": "",
"option": {
"english: "English option 3",
"hindi: "४ मीटर "
},
"checked": false
},
{
"image": "",
"option": {
"english: "English option 4",
"hindi: "१ मीटर "
},
"checked": false
}
]这是我尝试过的方法。这里我映射的问题就是我从后端得到的问题。
const combinedArray = questions.map((question) => {
let combined = {};
let questionObj = {};
let optionsObj = {};
question.forEach((languageQ) => {
combined.question_id = languageQ.question_id;
combined.u_question_id = languageQ.u_question_id;
combined.option_type = languageQ.option_type;
combined.question_image = languageQ.question_image;
combined.option_number = languageQ.option_number;
combined.correct_answer = languageQ.correct_answer;
combined.marks = languageQ.marks;
combined.skill_id = languageQ.skill_id;
combined.nos_id = languageQ.nos_id;
if (languageQ.language === 'English') {
questionObj.english = languageQ.question;
} else if (languageQ.language === 'Hindi') {
questionObj.hindi = languageQ.question;
}
combined.question = questionObj;
languageQ.options.forEach((option) => {
if (languageQ.language === 'English') {
optionsObj.english = option.option;
} else if (languageQ.language === 'Hindi') {
optionsObj.hindi = option.option;
}
option.option = optionsObj;
});
combined.options = languageQ.options;
});
return combined;
});我成功地获得了一个单一的对象数组,问题就像我想要的那样组合在一起,但选项不正确。它只接受选项数组的最后一项。
发布于 2020-09-06 01:33:13
尝试使用forEach intead (或者reduce )。
var questions = [
[
{
"question_id": "565",
"option_type": "1",
"question_image": "",
"option_number": "4",
"correct_answer": "d",
"marks": "4",
"language": "Hindi",
"skill_id": "",
"nos_id": "29",
"question": "वितरण लाइन के लिए प्रयुक्त प्रतीक को पहचानें",
"options": [
{
"image": "",
"option": "मौजूदा लाइन",
"checked": false
},
{
"image": "",
"option": "योजनाबद्ध लाइन",
"checked": false
},
{
"image": "",
"option": "भूमिगत लाइन",
"checked": false
},
{
"image": "",
"option": "ओवरहेड लाइन",
"checked": false
}
]
},
{
"question_id": "565",
"option_type": "1",
"question_image": "",
"option_number": "4",
"correct_answer": "d",
"marks": "4",
"language": "English",
"skill_id": "",
"nos_id": "29",
"question": "Identify the symbol used for distribution line",
"options": [
{
"image": "",
"option": "E O 1",
"checked": false
},
{
"image": "",
"option": "E O 2",
"checked": false
},
{
"image": "",
"option": "E O 3",
"checked": false
},
{
"image": "",
"option": "E O 4",
"checked": false
}
]
}
],
[
{
"question_id": "625",
"option_type": "1",
"question_image": "",
"option_number": "4",
"correct_answer": "b",
"marks": "5",
"language": "Hindi",
"skill_id": "",
"nos_id": "34",
"question": "निम्नलिखित में से कौन सी न्यूनतम ऊंचाई है जिससे ऊपर सुरक्षा बेल्ट पहनना चाहिए?",
"options": [
{
"image": "",
"option": "३ मीटर",
"checked": false
},
{
"image": "",
"option": "२ मीटर ",
"checked": false
},
{
"image": "",
"option": "४ मीटर ",
"checked": false
},
{
"image": "",
"option": "१ मीटर ",
"checked": false
}
]
},
{
"question_id": "625",
"option_type": "1",
"question_image": "",
"option_number": "4",
"correct_answer": "b",
"marks": "5",
"language": "English",
"skill_id": "",
"nos_id": "34",
"question": "Which of the following is the minimum height at which a safety belt must be worn? ",
"options": [
{
"image": "",
"option": "English option 1",
"checked": false
},
{
"image": "",
"option": "English option 2",
"checked": false
},
{
"image": "",
"option": "English option 3",
"checked": false
},
{
"image": "",
"option": "English option 4",
"checked": false
}
]
}
]
];
function transformQuestion (questions) {
let questionMap = {};
let result = [];
questions.forEach((question) => {
question.forEach((languageQ) => {
let combined = {};
let id = ""+languageQ.question_id;
if (questionMap.hasOwnProperty(id)) {
combined = questionMap[id];
} else {
questionMap[id] = combined;
combined.question_id = languageQ.question_id;
combined.u_question_id = languageQ.u_question_id;
combined.option_type = languageQ.option_type;
combined.question_image = languageQ.question_image;
combined.option_number = languageQ.option_number;
combined.correct_answer = languageQ.correct_answer;
combined.marks = languageQ.marks;
combined.skill_id = languageQ.skill_id;
combined.nos_id = languageQ.nos_id;
}
combined.question = combined.question || {};
combined.question[languageQ.language] = languageQ.question;
combined.options = combined.options || [];
if (combined.options.length > 0) {
languageQ.options.forEach((option, ndx) => {
combined.options[ndx].option[languageQ.language] = option.option;
});
} else {
combined.options = languageQ.options.map((option) => {
let opt = {};
opt[languageQ.language] = option.option;
return {"image": option.image
,"option": opt
,"checked": option.checked };
});
}
});
});
Object.keys(questionMap).forEach((key) => {
if (questionMap.hasOwnProperty(key)) {
result.push(questionMap[key]);
}
});
return result;
}
console.log(transformQuestion(questions));
https://stackoverflow.com/questions/63756257
复制相似问题