在Jquery中按顺序命名

Days name in order in Jquery

本文关键字:顺序 Jquery      更新时间:2023-09-26

我有一个像

这样的数组
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...