我有以下变量(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,甚至是一个适合我需要的功能?
答案 0 :(得分:4)
您可以使用方法 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 。
答案 1 :(得分:2)
您可以使用sort
函数作为VisioN建议并传递您自己的比较策略。
这样的事情对你有用:
myData.sort(function(a,b)
{
if ((a[0]>b[0]) && (a[1]>b[1])) return 1
if ((a[0]==b[0]) && (a[1]==b[1])) return 0
if ((a[0]<b[0]) && (a[1]<b[1])) return -1
});
有关排序的更多信息:http://www.w3schools.com/jsref/jsref_sort.asp
关于我的“策略对象”评论,这里有更多信息:http://en.wikipedia.org/wiki/Strategy_pattern
答案 2 :(得分:1)
如果目标是为一周中的每一天创建单独的数组,则无需进行排序
myData = ["['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]"];
myData = myData.map (function (v) { // convert to useable form
v = v.match (/^\['(\d{4}-\d{2}-\d{2})',\s*(\d+)\]$/);
return [v[1], v[2]];
});
myDays = myData.reduce (function (days, v) {
days[(new Date (v[0])).getDay ()].push (v);
return days;
}, [[],[],[],[],[],[],[]]); // array of 7 arrays, one per day of week.
JSON.stringify (myDays);
- &GT;
"[[["2013-04-21","26"],["2013-04-28","593"],["2013-05-05","74"],["2013-05-12","0"]],
[["2013-04-15","26"],["2013-04-22","31"],["2013-04-29","925"],["2013-05-06","76"],["2013-05-13","61"]],
[["2013-04-16","10"],["2013-04-23","48"],["2013-04-30","877"],["2013-05-07","51"]],
[["2013-04-17","51"],["2013-04-24","821"],["2013-05-01","277"],["2013-05-08","93"]],
[["2013-04-18","46"],["2013-04-25","917"],["2013-05-02","112"],["2013-05-09","231"]],
[["2013-04-19","32"],["2013-04-26","949"],["2013-05-03","115"],["2013-05-10","350"]],
[["2013-04-20","50"],["2013-04-27","405"],["2013-05-04","62"],["2013-05-11","258"]]
]"