Как перетасовать данные JSON.parse?

Можно ли перетасовать результат анализа json из ajax?

$.ajax({
    method: 'GET',
    url: '/-pathSomething-/--ExampleOnly--',
    data: { sample: sample, sample: sample, sample: sample },
    success: function (result) {
        var ExamDislayQNChoiceML = JSON.parse(result);
    }
});

Это выглядит так

Я не знаю, как это сделать, поэтому у меня мало кода для показа.

Ожидаемый результат. случайно

{ QuesNo: 3, QuesID: 3, ... }
{ QuesNo: 1, QuesID: 1, ... }
{ QuesNo: 4, QuesID: 4, ... }
{ QuesNo: 2, QuesID: 2, ... }
{ QuesNo: 5, QuesID: 5, ... }

Что вы имеете в виду под перемешиванием?

Sudhir Ojha 16.02.2023 08:11

Подумайте о перетасовке массива. Если вам нужно отсортировать свойства объекта, вы, вероятно, могли бы перетасовать массив ключей объекта. А пока скопируйте и вставьте текст [javascript]fisher yates в поле поиска в верхней части этой страницы и нажмите клавишу ввода.

traktor 16.02.2023 08:20
Оптимизация React Context шаг за шагом в 4 примерах
Оптимизация React Context шаг за шагом в 4 примерах
При использовании компонентов React в сочетании с Context вы можете оптимизировать рендеринг, обернув ваш компонент React в React.memo сразу после...
Интервьюер: Почему '[] instanceof Object' возвращает "true"?
Интервьюер: Почему '[] instanceof Object' возвращает "true"?
Все мы знаем, что [] instanceof Array возвращает true, но почему [] instanceof Object тоже возвращает true?
Абстрактное синтаксическое дерево (AST) и как оно работает с ReactJS
Абстрактное синтаксическое дерево (AST) и как оно работает с ReactJS
Абстрактное синтаксическое дерево (AST) - это древовидная структура данных, которая представляет структуру и иерархию исходного кода на языке...
2
2
56
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Это может сделать ваш запрос

let myJSON = {
  "name": "John",
  "age": 30,
  "city": "New York"
};

let myArray = Object.entries(myJSON);

for (let i = myArray.length - 1; i > 0; i--) {
  const j = Math.floor(Math.random() * (i + 1));
  [myArray[i], myArray[j]] = [myArray[j], myArray[i]];
}

myJSON = Object.fromEntries(myArray);

console.info(myJSON);

Это будет выход

{
  "city": "New York",
  "name": "John",
  "age": 30
}
Ответ принят как подходящий

Используйте алгоритм тасования Фишера-Йейтса, вот ссылка на документацию: https://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle и вот пример того, как использовать его для перемешивания массива объектов

$.ajax({
    method: 'GET',
    url: '/-pathSomething-/--ExampleOnly--',
    data: { sample: sample, sample: sample, sample: sample },
    success: function (result) {
        var ExamDislayQNChoiceML = JSON.parse(result);
        shuffleArray(ExamDislayQNChoiceML);
        console.info(ExamDislayQNChoiceML); // shuffled array
    }
});

function shuffleArray(array) {
    for (let i = array.length - 1; i > 0; i--) {
        const j = Math.floor(Math.random() * (i + 1));
        [array[i], array[j]] = [array[j], array[i]];
    }
}

Предполагая, что вы хотите перетасовать массив объектов вопросов: вы можете передать метод Math.random() в метод Array.sort(). Math.random() возвращает число с плавающей точкой от 0 до 1. Когда вы вычитаете 0,5 из результата Math.random(), функция сравнения Array.sort() возвращает случайное положительное или отрицательное значение, поэтому массив перемешивается:

const shuffleArray = arr => arr.sort(() => Math.random() - 0.5);
const shuffledArr = shuffleArray(arr);

Другие вопросы по теме