在Jquery中按顺序命名
Days name in order in Jquery
我有一个像
这样的数组var abc = ["mon","Thu","Fri","Tue","Wed","Sun","Sat"]
接下来我希望这些天按照
的顺序排列["mon","Tue","Wed","Thu","Fri","Sat","Sun"]
是否有任何内置函数或任何逻辑?
我使用了一个map对象与排序函数一起使用。非常容易的。
var arrayOfDays = ["Mon","Thu","Fri","Tue","Wed","Sun","Sat"]; //array to be sorted
//int this map, define the "correct" order of days
var map = {
"Sun" : 0,
"Mon" : 1,
"Tue" : 2,
"Wed" : 3,
"Thu" : 4,
"Fri" : 5,
"Sat" : 6,
}
function dateSort(array) //function to sort the array
{
for(i = 0 ; i < array.length ; i++)
for(j = i + 1 ; j < array.length ; j++)
{
if(map[array[i]] > map[array[j]])
{
temp = array[i];
array[i] = array[j];
array[j] = temp;
}
}
}
可以如下方式调用:
datesort(arrayOfDays);
我通过在调用函数之前和之后打印日期数组的值来测试它:
Before: Mon Thu Fri Tue Wed Sun Sat
After: Sun Mon Tue Wed Thu Fri Sat
编辑:根据其他人的建议,使用Array.sort()的版本-但如果你是初学者,请避免使用它。
定义自定义比较函数:
function dateCompare(d1, d2)
{
if(map[d1] == map[d2])
return 0;
return (map[d1] < map[d2]) ? -1 : 1;
}
调用:
arrayOfDays.sort(dateCompare);
根据其他人的指示,您需要使用方括号来表示数组,而不是大括号:
var abc = ["mon","Thu","Fri","Tue","Wed","Sun","Sat"];
没有预定义的方法来识别工作日,但是您可以将给定的日期名称与正确顺序的列表进行比较,如下所示:
function compareDayNames(day1, day2) {
var weekdays = ',monday,tuesday,wednesday,thursday,friday,saturday,sunday';
return weekdays.indexOf(',' + day1.toLowerCase())
- weekdays.indexOf(',' + day2.toLowerCase());
}
var abc = ["mon","Thu","Fri","Tue","Wed","Sun","Sat"];
abc.sort(compareDayNames);
console.log('Sorted: ' + abc.join(','));
控制台中输出为:
Sorted: mon,Tue,Wed,Thu,Fri,Sat,Sun
该函数还可以很好地对较长和较短的名称进行排序:
var abc = ['Satur','Tu', 'W', 'M', 'Thurs'];
abc.sort(compareDayNames);
console.log('Sorted: ' + abc.join(','));
输出:Sorted: M,Tu,W,Thurs,Satur
编辑:如果您想在提供无效的日期名称或少于2个字符的名称(因为T和S是不明确的)时抛出错误,那么重写比较函数如下:
function compareDayNames(day1, day2) {
var weekdays = ',monday,tuesday,wednesday,thursday,friday,saturday,sunday';
function dayNumber(day) {
var pos = weekdays.indexOf(',' + day.toLowerCase());
if (pos === -1 || day.length < 2) {
throw '"' + day + '" is not a valid day name';
}
return pos;
}
return dayNumber(day1) - dayNumber(day2);
}
$(document).ready(function () {
var ndays = "";
var days = "Sat,Fri,mon,Thu,Tue,Wed,Sun";
var dys = days.split(",");
debugger;
for (var i = 0; i < dys.length; i++) {
switch (dys[i]) {
case "mon":
ndays = ndays + ",1";
break;
case "Tue":
ndays = ndays + ",2";
break;
case "Wed":
ndays = ndays + ",3";
break;
case "Thu":
ndays = ndays + ",4";
break;
case "Fri":
ndays = ndays + ",5";
break;
case "Sat":
ndays = ndays + ",6";
break;
default:
ndays = ndays + ",7";
break;
}
alert(ndays);
}
var cDays = "";
var wdays = ndays.split(",").sort();
for (var s = 0; s < wdays.length; s++) {
//alert(wdays[s]);
debugger;
if (wdays[s] === "1") {
cDays = "Mon";
}
else if (wdays[s] === "2") {
cDays = cDays + ",Tue";
}
else if (wdays[s] === "3") {
cDays = cDays + ",Wed";
}
else if (wdays[s] === "4") {
cDays = cDays + ",Thu";
}
else if (wdays[s] === "5") {
cDays = cDays + ",Fri";
}
else if (wdays[s] === "6") {
cDays = cDays + ",Sat";
}
else {
cDays = cDays + ",Sun";
}
}
});
没有内置函数,您需要按照其他答案中的建议编写自己的逻辑。你可以创建一个通用函数来比较两个数组…
function compareDays(wrongSquence , rightSequence) {
var i=0;
for(i=0;i<wrongSquence.length;i++) {
if(wrongSquence [i] != rightSequence[i]) {
wrongSquence [i] = rightSequence[i];
}
}
return wrongSquence;
}
//e.g....
var abc = ["mon","Thu","Fri","Tue","Wed","Sun","Sat"],
outputFormat = ["mon","Tue","Wed","Thu","Fri","Sat","Sun"];
var correctArray = compareDays(abc, outputFormat);
console.log(correctArray); // check output...
相关文章:
- 按照选项卡索引的顺序循环一个jQuery选择
- 多个jQuery.on()事件无法运行xBrowser(取决于顺序)
- jQuery插件冲突和脚本声明顺序
- Java脚本和jquery的任何特定顺序
- 使用jquery队列按顺序淡入任意数量的文本行
- 当行增加时自动递增序列号,并在 jQuery 中删除行时自动重新调整编号顺序
- 无法让 jQuery 以正确的顺序执行代码
- 如何按顺序执行 jQuery 函数
- 在学习JavaScript,Ajax,jQuery和JSON时是否与顺序相关
- 获取项目的顺序 jQuery 可排序并设置它们的顺序
- jquery—按循环顺序更改背景颜色
- 延迟的jquery ajax请求的顺序
- 如何按字母顺序对select2(jQuery插件)选项进行排序
- 排列<p>使用jQuery按日期顺序排列的元素
- 保证HTML表单提交和jQuery onclick的执行顺序
- JS中jQuery函数的过程顺序
- 如何按顺序使用jQuery事件
- 如何知道选中/突出显示的文本jquery的顺序出现
- 从顺序 jQuery ajax 调用返回承诺
- 循环内部的执行顺序-jQuery