在遵守一些(主要是排序)条件的同时,在网格中显示字母和数字

史密斯

我正在显示产品网格(在我的网站上出售的项目)。

网格项目显示的逻辑是:

  • 每行最多10个项目。

  • 行必须由数字或字母组成(不能混合)

  • 项目必须井井有条(数字或字母)。

  • 网格末尾的字母。

  • 当行由数字组成时,同一行中只允许相同“十”之内的数字。例如,如果我们有数字3、1、2、23、15、11,则代码会将这些数字分组,例如:[1,2,3],[11、15],[23]。(然后,在我的代码中,然后在网格中显示适当的项目,[1,2,3]进入第1行的[11,15]进入第2行,等等。

假设数组(代码中的category.products)如下所示:

[{
    style_code: '1'
},{
    style_code: '12'
},{
    style_code: '2'
},{
    style_code: '11'
},{
    style_code: 'D'
},{
    style_code: 'A'
},{
    style_code: 'B'
},{
    style_code: 'CAB'
},{
    style_code: 'CAA'
},{
    style_code: 'F'
},{
    style_code: 'G'
},{
    style_code: 'H'
},{
    style_code: 'I'
},{
    style_code: 'J'
},{
    style_code: 'K'
}]

这些组看起来像:[1,2],[11,12],[A,B,CAA,CAB,D,F,G,H,I,J],[K]

现在,该代码可以正确地对数字进行分组。

但是,当涉及字母时,代码会将它们全部放在同一个组中-这不是期望的行为,我需要一些帮助来纠正代码以使其按需工作。

function dynamicSort(property) {
    var sortOrder = 1;
    if(property[0] === "-") {
        sortOrder = -1;
        property = property.substr(1);
    }
    return function (a,b) {
        var result = (a[property] < b[property]) ? -1 : (a[property] > b[property]) ? 1 : 0;
        return result * sortOrder;
    }
}

// Grouping the style codes
function groupBy(ary, keyFunc) {
    var r = {};
    ary.forEach(function (x) {
        var y = keyFunc(x.style_code);
        r[y] = (r[y] || []).concat(x);
    });
    return Object.keys(r).map(function (y) {
        return r[y];
    });
}

category.products.sort(dynamicSort('style_code'));

if (category.products.length > 0) {
    var sortedProductsArray = groupBy(category.products, isNaN);

    if (sortedProductsArray[1]) {
        sortedProductsArray = [].concat(
            groupBy(sortedProductsArray[0], function (x) { return Math.floor(x / 10) }),
            [sortedProductsArray[1].sort()]
        );
    } else {
        sortedProductsArray = groupBy(sortedProductsArray[0], function (x) {
            // if (!isNaN(x)) {
                return Math.floor(x / 10);
            // }
            // return x;
        });
    }
}
妮娜·斯科茨(Nina Scholz)

基本上,我为所有元素申请一个new属性group,该属性包含有关排序顺序的信息(以字符串形式):

style_code group comment
---------- ----- ---------------------------------
      1      0   integer part of log10(style_code)
     11      1   integer part of log10(style_code)
      a      l   small letter l for all not numeric strings

然后,我用group对数据进行排序style_code最后一点是重新定义页面中的排序组。因此,如果新页面是第一页或组已更改或页面长度已达到10,则将应用新页面。

如果需要,您可以使用以下代码group从所有元素中删除该属性paged

function deleteGroup(a) {
    if (Array.isArray(a)) {
        a.forEach(deleteGroup);
    } else {
        delete a.group;
    }
}
paged.forEach(deleteGroup);

现在是工作示例:

function getPaged() {
    data.forEach(function (a) {
        a.group = isFinite(a.style_code) ? '' + (Math.log(a.style_code) / Math.log(10) | 0) : 'l';
    });
    data.sort(function (a, b) {
        return a.group.localeCompare(b.group) || a.style_code.localeCompare(b.style_code);
    });
    return data.reduce(function (r, a) {
        var i = r.length - 1,
            j = ~i && r[i].length - 1;
        if (!~i || r[i][j].group !== a.group || j === 9) {
            r.push([]);
        }
        r[r.length - 1].push(a);
        return r;
    }, []);
}

var data = [
        { style_code: '1' },
        { style_code: '12' },
        { style_code: '2' },
        { style_code: '11' },
        { style_code: 'D' },
        { style_code: 'A' },
        { style_code: 'B' },
        { style_code: 'CAB' },
        { style_code: 'CAA' },
        { style_code: 'F' },
        { style_code: 'G' },
        { style_code: 'H' },
        { style_code: 'I' },
        { style_code: 'J' },
        { style_code: 'K' }
    ],
    paged = getPaged();

document.write('<pre>' + JSON.stringify(paged, 0, 4) + '</pre>');

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

C - 在大写字母和数字的输入字符串中添加空格,但有一些例外

来自分类Dev

在jQuery中按字母和数字排序

来自分类Dev

为什么在bash的printf内置函数中只有一些字母被视为无效数字?

来自分类Dev

JavaScript-用数字替换一些字母

来自分类Dev

用字母和数字在python中对表格进行排序

来自分类Dev

替换javascript中的一些数字

来自分类Dev

我的选择排序将数组中的一些数字替换为0

来自分类Dev

使用C#和Regex查找并包围一些html文本中的所有单词和数字

来自分类Dev

单击按钮,将一些文本和数字添加到div中。不起作用

来自分类Dev

难以使数字显示在网格单元中

来自分类Dev

如何在网格顶部添加一些JavaScript代码以在后台工作

来自分类Dev

同时要求字母和数字-regExp

来自分类Dev

C ++中的直方图代码显示了一些疯狂的意外数字

来自分类Dev

当AngularJS中满足某些条件时,如何在html中显示一些文本?

来自分类Dev

Excel:在某些条件下添加一些数字

来自分类Dev

如何在Kendo UI MVC中自定义工具提示,例如在网格的单元格工具提示中包含一些按钮?

来自分类Dev

如何将一串字母和数字分成数组并分别在javascript中对其进行排序

来自分类Dev

在python中以一些数字打印数字

来自分类Dev

只允许使用字母,数字和一些外来字母?

来自分类Dev

在网格中显示图像

来自分类Dev

如何通过整数流循环?并在迭代过程中你同时,我要检查它的一些条件

来自分类Dev

如何检查一个变量是否同时包含字母和数字

来自分类Dev

在保留一些顺序的同时,按第一列对逗号分隔的文件进行排序

来自分类Dev

Java中的排序合并代码需要一些澄清

来自分类Dev

一些朋友功能不遵守规则

来自分类Dev

在C中激活数字的一些位

来自分类Dev

Java脚本中的一些大数字问题

来自分类Dev

在Excel单元格中删除一些数字

来自分类Dev

正则表达式,用于字母数字和一些特殊字符

Related 相关文章

  1. 1

    C - 在大写字母和数字的输入字符串中添加空格,但有一些例外

  2. 2

    在jQuery中按字母和数字排序

  3. 3

    为什么在bash的printf内置函数中只有一些字母被视为无效数字?

  4. 4

    JavaScript-用数字替换一些字母

  5. 5

    用字母和数字在python中对表格进行排序

  6. 6

    替换javascript中的一些数字

  7. 7

    我的选择排序将数组中的一些数字替换为0

  8. 8

    使用C#和Regex查找并包围一些html文本中的所有单词和数字

  9. 9

    单击按钮,将一些文本和数字添加到div中。不起作用

  10. 10

    难以使数字显示在网格单元中

  11. 11

    如何在网格顶部添加一些JavaScript代码以在后台工作

  12. 12

    同时要求字母和数字-regExp

  13. 13

    C ++中的直方图代码显示了一些疯狂的意外数字

  14. 14

    当AngularJS中满足某些条件时,如何在html中显示一些文本?

  15. 15

    Excel:在某些条件下添加一些数字

  16. 16

    如何在Kendo UI MVC中自定义工具提示,例如在网格的单元格工具提示中包含一些按钮?

  17. 17

    如何将一串字母和数字分成数组并分别在javascript中对其进行排序

  18. 18

    在python中以一些数字打印数字

  19. 19

    只允许使用字母,数字和一些外来字母?

  20. 20

    在网格中显示图像

  21. 21

    如何通过整数流循环?并在迭代过程中你同时,我要检查它的一些条件

  22. 22

    如何检查一个变量是否同时包含字母和数字

  23. 23

    在保留一些顺序的同时,按第一列对逗号分隔的文件进行排序

  24. 24

    Java中的排序合并代码需要一些澄清

  25. 25

    一些朋友功能不遵守规则

  26. 26

    在C中激活数字的一些位

  27. 27

    Java脚本中的一些大数字问题

  28. 28

    在Excel单元格中删除一些数字

  29. 29

    正则表达式,用于字母数字和一些特殊字符

热门标签

归档