@AlexB_49
Студент

Как перетасовать случайным образом двумерный массив на JS?

Здравствуйте. Я тренируюсь использовать JS, делая небольшие тесты. У меня есть массив такого типа:

const questions = 
[
    {
        question: "Какой-то вопрос",
        answers:
        [
            {text: "Ответ", correct: true},
            {text: "Ответ", correct: true},
            {text: "Ответ", correct: false},
            {text: "Ответ", correct: true}
        ]
    },

   {
        question: "Какой-то вопрос",
        answers:
        [
            {text: "Ответ", correct: true},
            {text: "Ответ", correct: true},
            {text: "Ответ", correct: false},
            {text: "Ответ", correct: true}
        ]
    },

{
        question: "Какой-то вопрос",
        answers:
        [
            {text: "Ответ", correct: true},
            {text: "Ответ", correct: true},
            {text: "Ответ", correct: false},
            {text: "Ответ", correct: true}
        ]
    },
]


В интернете я нашел код, который перетасывает элементы (то-есть внутренние массивы) массива questions (перед этим прописал let shuffledQuestions):

shuffledQuestions = questions.sort(() => Math.random() - .5);


А как перетасовать ответы (answers), чтобы ответы размещались в случайном порядке?

Подскажите, пожалуйста, буду благодарен.
  • Вопрос задан
  • 72 просмотра
Решения вопроса 1
progspectar
@progspectar
Краткость сестра нашего брата
console.log(JSON.stringify(questions));

questions.forEach((e) => {
return e.answers.sort(() => Math.random() - 0.5);
});

console.log(JSON.stringify(questions));
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
VlasenkoFedor
@VlasenkoFedor
Программист: php, js, go
const shuffle = a => {
    for (let b = a.length, d, c; 0 !== b;) c = Math.floor(Math.random() * b), --b, d = a[b], a[b] = a[c], a[c] = d;
    return a
};

const res = shuffle(questions.map(v => {
    v.answers = shuffle(v.answers);
    return v
}));

res.forEach(({answers})=>console.log(answers))

вариант
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы