以下是一些使用 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 的情况下,可以使用 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() 方法并非旨在产生随机排序,并且以这种方式使用它会导致结果偏差。Fisher-Yates 洗牌算法是此任务的更好选择。
可以使用 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 洗牌算法的时间复杂度为 O(n),其中 n 是数组中的元素数量。这使其成为随机排序大型数组的有效选择。
是的,Fisher-Yates 洗牌算法可用于随机排序任何类型的元素数组,包括对象。该算法将每个元素视为单个单元,而不管它包含什么数据。
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); };
是的,可以创建数组的副本并随机排序副本。这可以使用 .slice() 方法来创建副本,然后将 Fisher-Yates 洗牌算法应用于副本。
是的,可以通过将字符串转换为字符数组、随机排序数组,然后将数组重新连接成字符串来在 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 中随机排序列表。可以使用 .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中文网其他相关文章!