I’m new to ReactJS library, and I’m trying to print the following structure of array:
Main Array[
Array0[
Object0{
questions: "question1",
answer1: "answer1",
answer2: "answer2"
},
Object1{
questions: "question1",
answer1: "answer1",
answer2: "answer2"
}
]
]
This structure of array is hold in state called question, I have tried to create new functional component and print it on user screen but I received the following error:
TypeError: quest[0].map is not a function
My target is to print Object0 and Object1 data.
const [question, setQuestion] = useState([]);
setQuestion([
[
{
questions: "question1",
answer1: "answer1",
answer2: "answer2"
},
{
questions: "question2",
answer1: "answer1",
answer2: "answer2"
}
]
]);
//Component
const QuestionsComponent = function questions(){
return (
<div>
{
question.map(function (quest){
quest[0].map(function(ques){
return quest.questions;
})
})
}
</div>
);
}
return(
<>
<QuestionsComponent />
</>
);
What is the correct approach to print array of objects inside of array?
Advertisement
Answer
When you map over question:
question.map(function (quest){
The quest variable will be each element of that array. Which in this case that element is:
[
{
questions: "question1",
answer1: "answer1",
answer2: "answer2"
},
{
questions: "question2",
answer1: "answer1",
answer2: "answer2"
}
]
An array of objects. So referencing an element of that array (such as quest[0]) would be:
{
questions: "question1",
answer1: "answer1",
answer2: "answer2"
}
Which indeed isn’t an array and has no .map().
It sounds like you wanted to map over quest, not an element of it:
quest.map(function(ques){
return quest.questions;
})
Ultimately it looks like your variable naming is confusing you here. You have something called question which contains an array, each of which contains an array, each of which contains a property called questions. The plurality/singularity of those is dizzying.
Perhaps question should really be questionGroups? It’s an array of arrays. Each “group” is an array of questions. Each of which should have a property called question.
Variable naming is important, and helps prevent confusion when writing your own code. So in this case it might be something like:
const [questionGroups, setQuestionGroups] = useState([]);
// then later...
questionGroups.map(function (questionGroup){
questionGroup.map(function (question){
return question.question;
})
})