如何在2d数组中只对单个列进行排序

时间:2013-02-26 19:55:18

标签: javascript multidimensional-array 2d sorting

我有一个名为dateTime []的二维数组。 dateTime [count] [0]包含将来的datetime和dateTime [count] [1]包含一个4位数值,如1234或其他东西。 我试图按升序对dateTime [count] [0]的列0进行排序。 (i,e,根据最近的日期时间排序2d数组的colunm 0)

假设我的javascript 2d数组如下:

dateTime[0][0] = 2/26/2013 11:41AM; dateTime[0][1] = 1234;
dateTime[1][0] = 2/26/2013 10:41PM; dateTime[1][1] = 4567;
dateTime[2][0] = 2/26/2013 8:41AM; dateTime[2][1] = 7891;
dateTime[3][0] = 3/26/2013 8:41AM; dateTime[3][1] = 2345;

我刚刚这样写了这就是我将值插入到dateTime[count][0] ; = new Date(x*1000);,其中x是unix time()

我希望数组在排序后看起来如何:

dateTime[0][0] = 2/26/2013 8:41AM; dateTime[0][1] = 7891;
dateTime[1][0] = 2/26/2013 11:41AM; dateTime[1][0] = 1234;
dateTime[2][0] = 2/26/2013 10:41PM; dateTime[2][1] = 4567;
dateTime[3][0] = 3/26/2013 8:41AM; dateTime[3][1] = 2345;

请让我知道如何用更少的代码来解决这个问题。

感谢。 :)

这是我迄今为止所做的(我没有对数组进行排序,此处dateTime也称为计时器)

function checkConfirm() {
        var temp = timers[0][0];
        var timeDiv = timers[0][1];
        for (var i=0;i<timers.length;i++) {
            if (timers[i][0] <= temp) { temp = timers[i][0]; timeDiv = timers[i][1]; }
        }
        if (timers.length > 0 ){ candidate(temp,timeDiv); }

    }

    function candidate(x,y) {
        setInterval(function () {
            var theDate = new Date(x*1000); 
            var now = new Date(); 
            if ( (now.getFullYear() === theDate.getFullYear()) && (now.getMonth() === theDate.getMonth()) ) {
                if ( (now.getDate() === theDate.getDate()) && (now.getHours() === theDate.getHours()) ) {
                    if ( now.getMinutes() === theDate.getMinutes() && (now.getSeconds() === theDate.getSeconds()) ) { alert("its time"); }
                }
            }
        }, 10);
    }

最后,我想在每次当前时间与数组中的时间匹配时提醒用户。这就是我试图解决问题的方法,但这是完全错误的方法。

1 个答案:

答案 0 :(得分:2)

使用.sort()功能,并比较日期。

// dateTime is the array we want to sort
dateTime.sort(function(a,b){
    // each value in this array is an array
    // the 0th position has what we want to sort on

    // Date objects are represented as a timestamp when converted to numbers
    return a[0] - b[0];
});

DEMO:http://jsfiddle.net/Ff3pd/