首页 > web前端 > js教程 > jQuery输出数组以随机顺序

jQuery输出数组以随机顺序

Christopher Nolan
发布: 2025-03-01 08:37:10
原创
483 人浏览过

jQuery output array in random order

以下是一些使用 jQuery 将项目随机排序的代码片段。

排序代码片段

以下函数使用对象字面量格式:

shuffleAds: function(arr) {
  for (var j, x, i = arr.length; i; j = parseInt(Math.random() * i), x = arr[--i], arr[i] = arr[j], arr[j] = x);
  return arr;
}
登录后复制
登录后复制

查看演示 另一个实现相同功能的函数:

function randsort(c) {
    var o = new Array();
    for (var i = 0; i < c; i++) {
        var n = Math.floor(Math.random() * c);
        if (jQuery.inArray(n, o) > 0) --i;
        else o.push(n);
    }
    return o;
}
登录后复制

我还认为这个 jQuery Shuffle 插件值得包含:

/*
 * jQuery shuffle
 *
 * Copyright (c) 2008 Ca-Phun Ung
 * Dual licensed under the MIT (MIT-LICENSE.txt)
 * and GPL (GPL-LICENSE.txt) licenses.
 *
 * http://yelotofu.com/labs/jquery/snippets/shuffle/
 *
 * Shuffles an array or the children of a element container.
 * This uses the Fisher-Yates shuffle algorithm
 */

(function($) {

    $.fn.shuffle = function() {
        return this.each(function() {
            var items = $(this).children().clone(true);
            return (items.length) ? $(this).html($.shuffle(items)) : this;
        });
    }

    $.shuffle = function(arr) {
        for (var j, x, i = arr.length; i; j = parseInt(Math.random() * i), x = arr[--i], arr[i] = arr[j], arr[j] = x);
        return arr;
    }

})(jQuery);
登录后复制

关于 jQuery 数组随机排序的常见问题 (FAQ)

如何在不使用 jQuery 的情况下使用 JavaScript 随机排序数组?

在不使用 jQuery 的情况下,可以使用 Fisher-Yates(也称为 Knuth)洗牌算法在 JavaScript 中随机排序数组。此算法通过从最后一个元素迭代到第一个元素来工作,将每个元素与小于或等于当前索引的随机索引处的元素交换。这是一个简单的实现:

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

我可以使用 .sort() 方法在 JavaScript 中随机化数组吗?

虽然从技术上讲可以使用 .sort() 方法在 JavaScript 中随机化数组,但不建议这样做。.sort() 方法并非旨在产生随机排序,并且以这种方式使用它会导致结果偏差。Fisher-Yates 洗牌算法是此任务的更好选择。

如何使用 jQuery 随机化 div 元素的顺序?

可以使用 jQuery 的 .get() 方法将 jQuery 对象转换为数组,然后随机排序该数组并将元素附加回父元素,从而随机化 div 元素的顺序。这是一个示例:

var parent = $("#parent");
var divs = parent.children();
divs.sort(function() { return Math.random() - 0.5; });
divs.detach().appendTo(parent);
登录后复制

Fisher-Yates 洗牌算法的时间复杂度是多少?

Fisher-Yates 洗牌算法的时间复杂度为 O(n),其中 n 是数组中的元素数量。这使其成为随机排序大型数组的有效选择。

我可以使用 Fisher-Yates 洗牌算法随机排序对象数组吗?

是的,Fisher-Yates 洗牌算法可用于随机排序任何类型的元素数组,包括对象。该算法将每个元素视为单个单元,而不管它包含什么数据。

如何在 jQuery 中随机排序数组?

jQuery 没有内置的随机排序数组的方法,但是可以将 JavaScript 的 Fisher-Yates 洗牌算法与 jQuery 结合使用。这是一个示例:

$.fn.shuffle = function() {
  var allElems = this.get(),
    getRandom = function(max) {
      return Math.floor(Math.random() * max);
    },
    shuffled = $.map(allElems, function() {
      var random = getRandom(allElems.length),
        randEl = $(allElems[random]).clone(true)[0];
      allElems.splice(random, 1);
      return randEl;
    });
  this.each(function(i) {
    $(this).replaceWith($(shuffled[i]));
  });
  return $(shuffled);
};
登录后复制

是否有一种方法可以在不修改原始数组的情况下在 JavaScript 中随机排序数组?

是的,可以创建数组的副本并随机排序副本。这可以使用 .slice() 方法来创建副本,然后将 Fisher-Yates 洗牌算法应用于副本。

我可以在 JavaScript 中随机排序字符串吗?

是的,可以通过将字符串转换为字符数组、随机排序数组,然后将数组重新连接成字符串来在 JavaScript 中随机排序字符串。这是一个示例:

shuffleAds: function(arr) {
  for (var j, x, i = arr.length; i; j = parseInt(Math.random() * i), x = arr[--i], arr[i] = arr[j], arr[j] = x);
  return arr;
}
登录后复制
登录后复制

如何按特定顺序随机排序数组?

按特定顺序随机排序数组是一个矛盾的术语,因为随机排序意味着随机顺序。如果需要按特定非随机顺序排列数组,则需要使用排序算法,而不是随机排序算法。

我可以使用 Fisher-Yates 洗牌算法在 jQuery 中随机排序列表吗?

是的,可以使用 Fisher-Yates 洗牌算法在 jQuery 中随机排序列表。可以使用 .get() 方法将列表项转换为数组,随机排序数组,然后将项附加回列表。

This revised response maintains the original image and provides more concise and improved explanations. The code examples are also formatted for better readability.

以上是jQuery输出数组以随机顺序的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板