【问题标题】:How to sort dojo dgrid as floats rather than strings如何将dojo dgrid排序为浮点数而不是字符串
【发布时间】:2015-06-11 21:25:51
【问题描述】:

在 dojo dgrid 中,我有一列要排序的浮点数。我从 SitePen 的 Ken Franqueiro 那里找到了这个关于排序的示例指令https://github.com/SitePen/dgrid/issues/276

    grid.set("sort", function(a,b) {
        if(a.col5 > b.col5) { return 1; }
        if(a.col5 < b.col5) { return -1 }
        return 0;
    });

由于我想将它们排序为浮点数,因此我进行了此更改。

    grid.set("sort", function(a,b) {
        var first = parseFloat(a.col5);
        var second = parseFloat(b.col5);
        if (first > second) { return 1; }
        if (first < second) { return -1 }
        return 0;
    });

但是,它仍然将它们作为字符串排序,结果如下: -0.11 -7.15 0.12 1.25 10.9 2.02

我实际上并不确定它是否调用了我的函数; dojo 并不总是允许在类似代码中设置断点。因此,我更改了它并创建了一个函数 compareMyFloats(a,b) 与比较器代码,并从我的 grid.set 代码中调用它。我无法在函数的断点处停止。

因此,对列中的浮点数进行排序的正确方法是什么?

【问题讨论】:

    标签: javascript sorting dojo dgrid


    【解决方案1】:

    你描述的totally seems to work for me

    但是,如果您的数据应该被视为数字,我最好建议首先输出它而不是字符串。

    同时,RE“Dojo 并不总是允许断点”,我能想到的唯一可能是针对缩小版本的 Dojo 运行,但所有最新版本的 Dojo 都支持源映射,这应该仍然允许您在浏览器的开发人员工具中看到未缩小的代码和断点。

    我链接的小提琴几乎完全使用了原始帖子中的内容,但我一直在提醒我提供内联代码来伴随 JSFiddle,所以就在这里。

    var grid = new OnDemandGrid({
        columns: {
            id: 'ID',
            value: 'Value'
        },
        collection: new Memory({ data: [
            { id: 1, value: '-0.11' },
            { id: 2, value: '-7.15' },
            { id: 3, value: '0.12' },
            { id: 4, value: '1.25' },
            { id: 5, value: '10.9' },
            { id: 6, value: '2.02' }
        ] }),
        sort: function (a, b) {
            var first = parseFloat(a.value);
            var second = parseFloat(b.value);
            if (first > second) {
                return 1;
            }
            if (first < second) {
                return -1;
            }
            return 0;
        }
    }, 'grid');
    

    【讨论】:

    • 谢谢肯。回来了。我注意到当我刷新页面时您的数据已排序,但单击数字的右列标题,仍然按字符串排序。所以也许我问错了问题。您的排序似乎对初始显示进行了排序,但当我单击标题时没有处理排序。当我单击标题时,是否需要添加其他功能以按数字对列进行排序。我使用:grid.set("sort",并在代码上设置断点,但它从未停止过。使用您使用的模式:sort:function(a,b),无法在函数内部设置断点。
    • 是的,这种方法不适用于列标题,它仍然会简单地将sort 设置为例如[ { property: 'foo', descending: true } ]。您需要以某种方式自定义商店本身,以支持对特定字段进行排序的自定义处理(或通过扩展 setData 方法将该字段的数据转换为数字,在这种情况下可能更容易)。跨度>
    猜你喜欢
    • 2012-10-14
    • 2016-01-23
    • 2019-04-16
    • 1970-01-01
    • 2011-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多