首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何对jqGrid枢轴表中的y维列进行自然排序/alpha数值排序

如何对jqGrid枢轴表中的y维列进行自然排序/alpha数值排序
EN

Stack Overflow用户
提问于 2015-07-26 06:32:33
回答 1查看 925关注 0票数 1

对于y维中的列,如何对alpha数字列名进行自然排序?

例如:考虑列名AA1、AA2、AA3、AA10、AA11。这些是按AA1,AA10,AA11,AA2,AA3在枢轴表y-维的顺序列出的.

所需的列的顺序是AA1,AA2,AA3,AA10,AA11

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-07-27 15:33:37

免费的jqGrid 4.9包含jqPivot的完整重写版本。我试着保持与上一个版本的兼容性,但它包含了许多高级特性。我试着用维基来描述那里。

使用jqPivot的人不多。所以我提醒它是怎么做的。它将输入数据作为源并生成新的数据,这些数据将是jqGrid的输入数据。此外,jqPivot根据输入数据和yDimension参数生成colModel。在对输入数据进行分析时,jqPivot采用xDimensionyDimension对输入数据进行排序。xDimension的顺序或排序定义了生成网格的行的顺序。yDimension的顺序或排序定义了生成网格的列的顺序和结果列的总数。选项compareVectorsByXcompareVectorsByY允许指定回调函数,该函数将用于整个x或y向量的自定义排序。重要的是要理解排序函数不仅指定列的顺序,而且还通知jqPivot 哪些向量应该被解释为相同的。例如,它可以将值1212.0012.00解释为相同,并指定12.06一样大。

下面我描述了一些可以通过xDimensionyDimension定制排序的方法。

首先,可以指定skipSortByX: trueskipSortByY: true参数。在这种情况下,输入数据必须按照您想要的顺序进行排序。下一个重要选项是布尔选项caseSensitive (带有默认值false)和trimByCollect (默认值true)。caseSensitive: true可以用大小写区分输入数据,trimByCollect: false可以用来保留输入数据中的尾随空格。

其他一些重要的选项可以在xDimensionyDimension中指定:sorttypesortordersortorder: "desc"可以用来逆转排序数据的顺序。选项sorttype可以是"integer" (或"int"),这意味着在排序期间截断(Math.floor(Number(inputValue)))输入数据;值"number""currency""float"意味着输入数据应该在排序期间转换为数字(Number(inputValue))。最后,我们可以不指定任何sorttype**,,而是指定** compare 回调函数,而不是compare回调是带有两个参数的函数,它应该返回众所周知的-1、0或1值。

例如,我为一个问题创建了一个问题。一个人问我以下情况。网站包含登录,该登录标识用户的国家。一个希望将用户的国家设置为排序顺序中的第一个。演示使用以下yDimension参数:

代码语言:javascript
运行
复制
yDimension: [
    { dataName: "sellyear", sorttype: "integer" },
    { dataName: "sell month",
        compare: function (a, b) {
            if (a === "Germany") { return b !== "Germany" ? -1 : 0; }
            if (b === "Germany") { return 1; }
            if (a > b) { return 1; }
            if (a < b) { return -1; }
            return 0;
        }}
]

它首先按排序顺序设置"Germany"。结果如下图所示

您可以使用相同的方法,使用代码进行来自答案的自然比较,您将实现您的需求。

在更高级的情况下,可以使用选项compareVectorsByXcompareVectorsByY。这项要求是,在所有其他情况下,在第一时间只在特定的一年内确定具体国家的标准订单。相应的演示使用compareVectorsByY来实现需求。它显示

并使用以下compareVectorsByY

代码语言:javascript
运行
复制
compareVectorsByY: function (vector1, vector2) {
    var fieldLength = this.fieldLength, iField, compareResult;

    if (fieldLength === 2) {
        if (vector1[0] === "2011" && vector1[1] === "Germany") {
            if (vector2[0] === "2011" && vector2[1] === "Germany") {
                return {
                    index: -1,
                    result: 0
                };
            }
            return {
                index: vector2[0] === "2011" ? 1 : 0,
                result: -1
            };
        }
        // any vector1 is larger as vector2 ("2011", "Germany")
        if (vector2[0] === "2011" && vector2[1] === "Germany") {
            return {
                index: vector2[0] === "2011" ? 1 : 0,
                result: 1
            };
        }
    }

    for (iField = 0; iField < fieldLength; iField++) {
        compareResult = this.fieldCompare[iField](vector1[iField], vector2[iField]);
        if (compareResult !== 0) {
            return {
                index: iField,
                result: compareResult
            };
        }
    }
    return {
        index: -1,
        result: 0
    };
}

需要注意的是,compareVectorsByY回调函数应该返回具有两个属性的对象indexresultresult属性的值应该是- 1,0或1,index属性的值在result: 0情况下应该是-1,在vector1vector2不同的向量中,基于be 0的索引值应该是-1。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31634358

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档