【问题标题】:How to achieve a sorted but random list with javascript/jquery如何使用 javascript/jquery 实现排序但随机的列表
【发布时间】:2014-08-30 17:14:57
【问题描述】:

我目前使用此代码对我的项目列表进行随机排序,效果很好:

$(document).ready(function () {
(function ($) {
    $.fn.randomize = function (childElem) {
        return this.each(function () {
            var $this = $(this);
            var elems = $this.children(childElem);
            elems.sort(function () {
                return (Math.round(Math.random()) - 0.5);
            });
            $this.remove(childElem);
            for (var i = 0; i < elems.length; i++)
            $this.append(elems[i]);
        });
    };
})(jQuery);

(function ($) {
    if (window.location.href.indexOf("st=") > -1) {

    } else {
        $('#itemBlock').randomize('.list_1');
    }
})(jQuery);

});

但是,在想办法修改此脚本以按特定顺序随机返回结果时,我感到很困惑。例如,我使用它的列表返回来自所有 5 个商店的所有特定类型的项目。因此,如果有人在寻找围裙,它将显示我们在 5 家商店中的每一家拥有的所有围裙。

上面的代码肯定会随机化列表,但我不知道如何考虑商店位置。

所以现在搜索围裙最初会从商店 A、B、C、D 和 E 返回如下列表:

BCDAEBCDDDDCEABBACACABCDAA

但我们想要实现的是这样的回报:

ABCDEABCDEABCDEABCDEABCDE

不一定完全按照这个顺序,而是以某种方式修改函数,以便在加载更多结果之前加载每个商店的结果。因此,一家商店不会连续出现 3 家,或者一家商店的代表人数会多于其他商店。

我应该使用过滤器或排序功能来解决这个问题吗?或者纯 javascript 会更有效地处理这个问题?

【问题讨论】:

    标签: javascript jquery sorting random filter


    【解决方案1】:

    要实现这一点,您必须遵循以下步骤:

    1. 随机对每个商店的商品进行单独排序
    2. 为每个随机列表中的项目编号
    3. 可选 - 如果您希望商店按顺序排列,请用零填充数字并附加商店的标识符([padded item number]|[store identifier] 例如00001|A
    4. 将所有列表合并为一个
    5. 按顺序编号(或字符串)对这个新列表进行排序

    【讨论】:

    • 感谢您的快速回答!我已经在这方面工作了一段时间,但没有取得太大进展——不过我想我明白了。我随机对各个列表进行排序——知道了——然后按顺序编号,然后在组合列表中设置它,以便按顺序排序:所有 1,然后是 2,然后是 3,等等。这很聪明解决方案。我在代码上有一些工作要做,但我很欣赏你的观点!我不会想到的!如果我不能直接访问各个列表,还有办法分配数字吗?如果我只处理组合列表?
    • 您可以以某种方式对元素进行分组。否则循环遍历并在数组中跟踪每个商店的编号。
    • 嗯...明白了。那就试试几样东西吧。我想如果我使用 javscript,我应该能够识别每个商店。
    猜你喜欢
    • 2019-04-27
    • 1970-01-01
    • 1970-01-01
    • 2013-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-05
    • 2016-05-02
    相关资源
    最近更新 更多