Помогите разобраться с методами массива JS
let initialState = {
questions: [
{
name: 'Вопрос 1 ',
id: 1,
answers: [
{ name: '1608', isRight: true, id: 1, isSelected: undefined },
{ name: '1871', isRight: false, id: 2, isSelected: undefined },
{ name: '1504', isRight: false, id: 3, isSelected: undefined },
{ name: '1927', isRight: false, id: 4, isSelected: undefined },
],
},
{
name: 'Вопрос 2',
id: 2,
answers: [
{ name: '1', isRight: false, id: 1, isSelected: undefined },
{ name: '2', isRight: false, id: 2, isSelected: undefined },
{ name: '3', isRight: false, id: 3, isSelected: undefined },
{ name: '4', isRight: true, id: 4, isSelected: undefined },
],
},
],
rightDoneQuestions:[],
}
reducer
if(action.type ===SET_RIGHT_DONE_QUESTIONS ){
return {
...state,
rightDoneQuestions:???
}
Помогите мне написать reducer. Мы должны рассмотреть массив questions. Для каждого объекта в нем рассматриваем массив answers. Для каждого объекта answers рассматриваем условие: если у этого объекта (isRight===true)&&(isSelected === true), то тогда нам нужно этот объект закинуть в массив rightDoneQuestions. Подскажите, как правильно это сделать?(какие методы массива использовать?)
Ответы (1 шт):
Автор решения: Lukas
→ Ссылка
let state = {
questions: [
{
name: 'Вопрос 1 ',
id: 1,
answers: [
{ name: '1608', isRight: true, id: 1, isSelected: undefined },
{ name: '1871', isRight: true, id: 2, isSelected: true },
{ name: '1504', isRight: false, id: 3, isSelected: undefined },
{ name: '1927', isRight: false, id: 4, isSelected: true },
],
},
{
name: 'Вопрос 2',
id: 2,
answers: [
{ name: '1', isRight: false, id: 1, isSelected: true },
{ name: '2', isRight: true, id: 2, isSelected: true },
{ name: '3', isRight: false, id: 3, isSelected: undefined },
{ name: '4', isRight: true, id: 4, isSelected: undefined },
],
},
],
rightDoneQuestions:[],
}
console.log({
...state,
rightDoneQuestions : state.questions.reduce((acc, obj) => {
obj.answers.forEach(answer => {
if (answer.isRight === true && answer.isSelected === true) acc.push(answer)})
return acc;
},[])
})