You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何打乱AJAX请求返回后经JSON.parse解析的数据?

如何打乱AJAX返回的数组对象顺序

当然可以实现数组内对象的随机排序,最常用且公平的方案是使用Fisher-Yates(费舍耶茨)洗牌算法,它能高效地对数组进行原地随机重排,避免普通随机排序出现的分布偏差问题。

第一步:定义洗牌函数

先写一个通用的洗牌函数,可复用在任何数组的随机排序场景:

// Fisher-Yates洗牌函数,实现公平的数组随机排序
function shuffleArray(array) {
  // 从数组末尾向前遍历
  for (let i = array.length - 1; i > 0; i--) {
    // 生成0到当前索引的随机整数
    const j = Math.floor(Math.random() * (i + 1));
    // 交换当前元素与随机选中的元素位置
    [array[i], array[j]] = [array[j], array[i]];
  }
  return array;
}

第二步:整合到AJAX回调中

把洗牌逻辑加到你的AJAX成功回调里,对解析后的数组进行打乱:

$.ajax({
    method: 'GET',
    url: '/-pathSomething-/--ExampleOnly--',
    data: { sample: sample, sample: sample, sample: sample },
    success: function (result) {
        var ExamDislayQNChoiceML = JSON.parse(result);
        // 调用洗牌函数打乱数组
        const shuffledQuestions = shuffleArray(ExamDislayQNChoiceML);
        // 此时shuffledQuestions就是随机排序后的对象列表,可直接用于后续渲染
        console.log(shuffledQuestions);
        // 示例输出会类似你期望的随机顺序:
        // { QuesNo: 3, QuesID: 3, ... }, { QuesNo: 1, QuesID: 1, ... }...
    }
});

为什么不用简单的sort排序?

如果用array.sort(() => Math.random() - 0.5)这种方式,会因为排序算法的比较特性,导致部分元素的随机分布不均匀,而Fisher-Yates算法能保证每个元素有均等的概率出现在任意位置,是更可靠的方案。

内容的提问来源于stack exchange,提问作者Strywyr

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 00:11:03