Ste*_*ven 2 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;
);
Run Code Online (Sandbox Code Playgroud)
它没有经过测试,但我做得对吗?(时间asc,天asc)星期一早上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;
Run Code Online (Sandbox Code Playgroud)
我的解决方案似乎有效,感谢@TJ Crowder
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;
}
});
Run Code Online (Sandbox Code Playgroud)
凝结:
events.sort(function(a, b)
{
return a.time != b.time
? a.time - b.time
: days[a.day] - days[b.day];
});
Run Code Online (Sandbox Code Playgroud)
你的基本方法是合理的.几点说明:
你不是days用作数组,所以我不会把它变成数组.代替:
var days = {
'SU': 0,
'MO': 1,
'TU': 2,
'WE': 3,
'TH': 4,
'FR': 5,
'SA': 6
};
Run Code Online (Sandbox Code Playgroud)
此外,您不需要这些引号,因为这些字符串都不是关键字,因此:
var days = {
SU: 0,
MO: 1,
TU: 2,
WE: 3,
TH: 4,
FR: 5,
SA: 6
};
Run Code Online (Sandbox Code Playgroud)
...但你可以选择将它们作为一种风格的东西,或者防止在以后添加关键词.
a['day']除非您用于属性名称的字符串是动态的或属性名称是保留字,否则您不必使用括号中的符号来查找属性().day既不是,所以你可以使用更简单的点缀符号(a.day).
elseifJavaScript中没有; 用else if.
你可以简化这个:
return (days[a['day']] < days[b['day']]) ? 1 : -1;
Run Code Online (Sandbox Code Playgroud)
至
return days[a.day] - days[b.day];
Run Code Online (Sandbox Code Playgroud)
..你可能能够做一些与你的time价值观相似的东西,但我不知道它们是什么,所以......现在你已经发布了它们,我做了,你可以.
强烈建议总是使用牙箍,而不仅仅是当你"需要"它们时.(你的三个分支实际上都不需要它们,但你只在两个分支上使用它们.)
你比较了a['time'],a['time]而不是b['time']检查平等.
你还没有结束你的功能(缺少})
由于您可以减去您的time值,因此您不需要进行最终的等式检查.
所以:
events.sort(function(a, b)
{
if (a.day != b.day)
{
return days[a.day] - days[b.day];
}
else
{
return a.time - b.time;
}
});
Run Code Online (Sandbox Code Playgroud)
......或者你可以进一步浓缩它:
events.sort(function(a, b)
{
return (a.day != b.day
? days[a.day] - days[b.day]
: a.time - b.time);
});
Run Code Online (Sandbox Code Playgroud)