首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多维数组的文本排序

多维数组的文本排序
EN

Stack Overflow用户
提问于 2013-11-28 17:50:29
回答 2查看 1.3K关注 0票数 0

我试图在Javascript中对多维数组进行排序。我看到了很多关于如何按数值排序的解释,但我似乎不知道如何根据文本对其排序。

我要排序的数组如下所示:

代码语言:javascript
复制
var blocks = [
    {
        "heading": ["2013-10-1", "Chris", "11"],
        "content": "stuff 1"
    },
    {
        "heading": ["2013-10-3", "Zoe", "14"],
        "content": "stuff 2"
    },
    {
        "heading": ["2013-10-2", "Petey", "12"],
        "content": "stuff 3"
    }
]

我知道我可以对这个多维的对象数组进行排序,比如数字的值:

代码语言:javascript
复制
blocks.sort(
    function(a,b){
        return a.heading[2] - b.heading[2];
        }
    )

如果我想按heading子数组中的第一个或第二个值对数组进行排序,我不确定传递给排序方法的函数会是什么样子,因为索引0的值是日期,而索引1的值是文本。

我试图查找将日期或文本更改为一个数字,然后根据它的数值计算它,但我无法找到这样做的方法(我也不知道这是否是解决这个问题的最佳方法)。有什么建议吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-11-28 18:07:25

编辑我应该指出,虽然我建议的最初解决方案有效,但它不是一个好的解决方案,因为它是不必要的复杂。

>运算符可用于您的目的。在比较字符串时,如果字符串a在按字母排序的列表中位于b之前,则字符串a被认为小于字符串a

唯一的问题是,这是区分大小写的,所以大写放在小写之前,例如,对字符进行排序,AaBbCc会给您ABCabc。

这意味着你可以这样做:

代码语言:javascript
复制
blocks = blocks.sort(function(a,b) { return a.heading[1] > b.heading[1] }

先前的答复:

也许有人能够提供一个更优雅的解决方案,但这是可行的。

请注意,sort()按字母顺序排序。因此,我们所需要做的就是使sort()函数在人员名称上工作。

代码语言:javascript
复制
blocks = blocks.sort(
    function(a,b){

        var x = [a.heading[1], b.heading[1]].sort()

        if (x[0] == a.heading[1]) {return -1} else
        {return 1};
        }
    )
票数 2
EN

Stack Overflow用户

发布于 2013-11-28 18:06:54

试着做这样的事情:

代码语言:javascript
复制
blocks.sort(function(a, b){
    if(a.heading[0] < b.heading[0]) return -1;
    if(a.heading[0] > a.heading[0]) return 1;
    return 0;
});

或者仅仅通过简化上面的代码:

代码语言:javascript
复制
blocks.sort(function(a, b){
     if(a.heading[0] < b.heading[0]) {
         return -1;
     } else {
         return 1;
     }
     return 0;
});

您还可以使用以下内容:

代码语言:javascript
复制
blocks.sort(function(a, b){
    var heading_a = a.heading.toLowerCase();
    var heading_a=b.heading.toLowerCase();

    if (heading_a < heading_a) //sort ascending
        return -1 
    if (heading_a > heading_a)
        return 1
    return 0    //just return default value indicating there is no sort
});

如果数据包含unicode字符串,则应该使用上面的代码,如下所示:

代码语言:javascript
复制
blocks.sort(function(a, b){
    var heading_a = a.heading[0].toLowerCase();
    var heading_a=b.heading[0].toLowerCase();

    return heading_a.localeCompare(heading_b);
});

这只是一个潜入排序的高峰,它只是一个快速的例子,我希望它能有所帮助。

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

https://stackoverflow.com/questions/20272169

复制
相关文章

相似问题

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