javascript - JavaScript 中的排序

标签 javascript sorting

我想按时间、日期排序。 这是我的尝试:

var days = new Array();
var days['SU'] = 0;
var days['MO'] = 1;
var days['TU'] = 2;
var days['WE'] = 3;
var days['TH'] = 4;
var days['FR'] = 5;
var days['SA'] = 6;

events.sort(function(a, b)
{
    if(a['day'] != b['day'])
    {
        return (days[a['day']] < days[b['day']]) ? 1 : -1;
    }
    else if(a['time'] != b['time'])
    {
        return (a['time'] < a['time']) ? 1 : -1;
    }
    else
        return 0;
);

尚未测试,但我这样做正确吗? (时间递增,天数递增)周一上午 8 点、周二上午 8 点、周一晚上 9 点是我正在寻找的顺序。

干杯。

events[0]['day'] = 'MO';
events[0]['time'] = 8;
events[1]['day'] = 'MO';
events[1]['time'] = 21;
events[2]['day'] = 'TU';
events[2]['time'] = 8;

感谢@T.J,我的解决方案似乎有效。克劳德

events = new Array();
events[0] = new Array();
events[0]['day'] = 'MO';
events[0]['time'] = 8;
events[1] = new Array();
events[1]['day'] = 'MO';
events[1]['time'] = 21;
events[2] = new Array();
events[2]['day'] = 'TU';
events[2]['time'] = 8;

var days = {
    'SU': 0,
    'MO': 1,
    'TU': 2,
    'WE': 3,
    'TH': 4,
    'FR': 5,
    'SA': 6
};

events.sort(function(a, b)
{
    if (a.time != b.time)
    {
        return a.time - b.time;
    }
    else if (a.day != b.day)
    {
        return days[a.day] - days[b.day];
    }
    else
    {
        return 0;
    }
});

压缩:

events.sort(function(a, b)
{
    return a.time != b.time
       ? a.time - b.time
       : days[a.day] - days[b.day];
});

最佳答案

你的基本方法是正确的。一些注意事项:

  1. 您没有使用 days 作为数组,因此我不会将其设为数组。相反:

    var days = {
        'SU': 0,
        'MO': 1,
        'TU': 2,
        'WE': 3,
        'TH': 4,
        'FR': 5,
        'SA': 6
    };
    

    此外,您不需要这些引号,因为这些字符串都不是关键字,因此:

    var days = {
        SU: 0,
        MO: 1,
        TU: 2,
        WE: 3,
        TH: 4,
        FR: 5,
        SA: 6
    };
    

    ...但您可以选择将它们保留为一种风格,或者避免稍后添加关键字。

  2. 您不必使用括号符号来查找属性 (a['day']),除非您用于属性名称的字符串是动态的或者属性名称是保留字。 day 两者都不是,因此您可以使用更简单的点分符号 (a.day)。

  3. JavaScript 中没有 elseif;使用else if

  4. 您可以简化此操作:

    return (days[a['day']] < days[b['day']]) ? 1 : -1;
    

    return days[a.day] - days[b.day];
    

    ..您也许可以对您的时间值执行类似的操作,但是我不知道它们是什么,所以...现在您我已经发布了,你也可以。

  5. 强烈建议始终使用大括号,而不仅仅是在您“需要”时使用它们。 (您的三个分支实际上都不需要它们,但您只在两个分支上使用它们。)

  6. 您将 a['time']a['time] 进行比较,而不是 b['time'] > 检查相等性时。

  7. 您尚未结束函数(缺少 })

  8. 由于您只需减去时间值,因此不需要最终的相等性检查。

    所以:

    events.sort(function(a, b)
    {
        if (a.day != b.day)
        {
            return days[a.day] - days[b.day];
        }
        else
        {
            return a.time - b.time;
        }
    });
    

    ...或者您可以进一步压缩它:

    events.sort(function(a, b)
    {
        return (a.day != b.day
               ? days[a.day] - days[b.day]
               : a.time - b.time);
    });
    

Live example

关于javascript - JavaScript 中的排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5610018/

相关文章:

javascript - 如何访问 jQuery.post() 返回的对象?

javascript - jQuery禁用/启用提交按钮

javascript - 对 Javascript 数组进行排序并获取数字差异

java - 使用模式匹配从文件中排序,Java

python - 对数组进行渐进排序,就像 Excel 一样

javascript - 使用 jQuery 动态添加和删除 TextBox 并获取动态 TextBox 的值

javascript - 输入类型 ="file"的替代方法以在 javascript 中读取文件

postgresql - 根据该列中的排序值重新编号 postgresql 中的列

arrays - 使用数组公式检查降序(范围内包含空白单元格) - Excel

arrays - 排序数组时最小化插入次数