JavaScript 按星期几对数组数组进行排序

标签 javascript jquery arrays sorting multidimensional-array

我有以下变量 (console.log(response)):

"['2013-04-15', 26]", "['2013-04-16', 10]", "['2013-04-17', 51]", "['2013-04-18', 46]", "['2013-04-19', 32]", "['2013-04-20', 50]", "['2013-04-21', 26]", "['2013-04-22', 31]", "['2013-04-23', 48]", "['2013-04-24', 821]", "['2013-04-25', 917]", "['2013-04-26', 949]", "['2013-04-27', 405]", "['2013-04-28', 593]", "['2013-04-29', 925]", "['2013-04-30', 877]", "['2013-05-01', 277]", "['2013-05-02', 112]", "['2013-05-03', 115]", "['2013-05-04', 62]", "['2013-05-05', 74]", "['2013-05-06', 76]", "['2013-05-07', 51]", "['2013-05-08', 93]", "['2013-05-09', 231]", "['2013-05-10', 350]", "['2013-05-11', 258]", "['2013-05-12', 0]", "['2013-05-13', 61]"

我按以下方式将其转换为数组数组:

var json = response.replace(/"/g,'');
json = "[" + json + "]";
json = json.replace(/'/g,'"');
var myData = JSON.parse(json);

我收到 (console.log(myData)):

myData = [Array[2], Array[2], Array[2], Array[2], Array[2], Array[2], Array[2], Array[2], Array[2], Array[2], Array[2], Array[2], Array[2], Array[2], Array[2], Array[2], Array[2], Array[2], Array[2], Array[2], Array[2], Array[2], Array[2], Array[2], Array[2], Array[2], Array[2], Array[2], Array[2]]

我需要以这种格式保存以供进一步使用。 我想知道是否可以按星期几对回复进行排序?并且是否可以将例如星期一、星期二存储在另一个变量中等等?我必须为此使用 JQuery,甚至是适合我需要的函数吗?

最佳答案

您可以使用方法 sort() 将您的自定义排序器函数作为参数传递(见下文)。
为了获得与每个数组的第一个元素(例如“2013-04-15”)对应的日期的星期几,您可以使用日期的 getDay() 功能。

var sorter = function(a, b) {
    /* The '.replace("-", "/")' part is for compatibility with Safari
       See also http://stackoverflow.com/questions/4310953/invalid-date-in-safari */
    var d1 = new Date(a[0].replace("-", "/")).getDay();
    var d2 = new Date(b[0].replace("-", "/")).getDay();
    return d1 - d2;
};
myData.sort(sorter);

注意:
<强> getDay() 返回 0 到 6(含)之间的整数,对应星期日到星期六的星期几(星期日为 0,星期一为 1...)。

如果你想按星期几对它们进行分类而不是排序,你可以使用这样的东西:

function classifyByDayOfWeek(customArr) {
    var byDayOfWeek = [[], [], [], [], [], [], []];
    for (var i = 0; i < customArr.length; i++) {
        var day = new Date(customArr[i][0]).getDay();
        byDayOfWeek[day].push(customArr[i]);
    };
    return byDayOfWeek;
}
myData = classifyByDayOfWeek(myData);

另请参阅此 short demo .

关于JavaScript 按星期几对数组数组进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16565875/

相关文章:

javascript - ng-click 无法以编程方式触发点击事件

java - 如何使用 java,javascript 获取客户端计算机 java 版本

javascript - 将 JSON "rows"与 "colums"合并到新对象中

javascript - 根据用户对 javascript 'confirm' 的响应更改 Material Slide Toggle 的值

php - 在 php 中包含一个类时出现奇怪的行为

Javascript:具有键值替代的多维数组?

javascript - 载入大图

javascript - 在 JavaScript 中从 HTML 表中删除一行

PHP基于子字符串对数组进行双重排序

c - 关于从二维动态数组中检索值