我在数组中有以下数据:
[{
Credits: '4',
Name: 'Computer Science 250: Introduction to Website Design',
Classes:
[
{ Day: 'Mon',
EndTime: '{ts \'1970-01-01 18:00:00\'}',
StartTime: '{ts \'1970-01-01 16:30:00\'}' },
{ Day: 'Wed',
EndTime: '{ts \'1970-01-01 18:00:00\'}',
StartTime: '{ts \'1970-01-01 16:30:00\'}' },
{ Day: 'Fri',
EndTime: '{ts \'1970-01-01 18:00:00\'}',
StartTime: '{ts \'1970-01-01 16:30:00\'}' } ] }
{
Credits: '3',
Name: 'Math 220: Differential Equations',
Classes:
[
{ Day: 'Mon',
EndTime: '{ts \'1970-01-01 18:30:00\'}',
StartTime: '{ts \'1970-01-01 17:30:00\'}' },
{ Day: 'Wed',
EndTime: '{ts \'1970-01-01 18:30:00\'}',
StartTime: '{ts \'1970-01-01 17:30:00\'}' },
{ Day: 'Fri',
EndTime: '{ts \'1970-01-01 18:30:00\'}',
StartTime: '{ts \'1970-01-01 17:30:00\'}' } ] }]
问题是我必须通过EndTime对数据进行排序(只有这部分数据是有序的,其余的不是)我该怎么做?
或者我怎样才能根据内部数组的属性对数据进行排序?
我正在使用javascript。
修改
问题是找出json数组中提供的主题是否会根据开始和结束时间发生冲突,例如上述主题同时发生,因此它们会发生冲突。
答案 0 :(得分:0)
通过解析你的Json(使用JSON.parse,例如:p)开始你的工作
当您拥有自己的javascript数组时,您可以非常简单地使用排序功能(如果您能够解析日期)。
例如,在这里我按照TYPE(PHYSIQUE before others)和字母顺序对数组进行排序:
return $.map(caracInfos, function (caracInfo) {
return new CaracInfo(caracInfo);
}).sort(function (caracInfo1, caracInfo2) {
if (caracInfo1.type === caracInfo2.type) return caracInfo1.carac.localeCompare(caracInfo2.carac);
if (caracInfo1.type === CaracInfo.TYPES["PHYSIQUE"]) return -1;
if (caracInfo2.type === CaracInfo.TYPES["PHYSIQUE"]) return 1;
return 0;
});
答案 1 :(得分:0)
您可以获取内部数组,使用课程名称(或所有课程信息)扩展其元素,并将它们连接在一起,最后使用自定义比较函数对它们进行排序:
function byDayTime(schedule) {
const weekDays = {Mon:1, Tue:2, Wed:3, Thu:4, Fri:5};
return schedule.reduce( (acc, course) =>
acc.concat(course.Classes.map( cls =>
Object.assign({}, cls, { courseName: course.Name })
))
, [] ).sort( (a, b) =>
weekDays[a.Day] - weekDays[b.Day] || a.EndTime - b.EndTime
);
}
// Sample data
const schedule = [{
Credits: '4',
Name: 'Computer Science 250: Introduction to Website Design',
Classes: [{
Day: 'Mon',
EndTime: '{ts \'1970-01-01 18:00:00\'}',
StartTime: '{ts \'1970-01-01 16:30:00\'}'
}, { Day: 'Wed',
EndTime: '{ts \'1970-01-01 18:00:00\'}',
StartTime: '{ts \'1970-01-01 16:30:00\'}'
}, { Day: 'Fri',
EndTime: '{ts \'1970-01-01 18:00:00\'}',
StartTime: '{ts \'1970-01-01 16:30:00\'}'
}]
}, {
Credits: '3',
Name: 'Math 220: Differential Equations',
Classes: [{
Day: 'Mon',
EndTime: '{ts \'1970-01-01 18:30:00\'}',
StartTime: '{ts \'1970-01-01 17:30:00\'}'
}, {
Day: 'Wed',
EndTime: '{ts \'1970-01-01 18:30:00\'}',
StartTime: '{ts \'1970-01-01 17:30:00\'}'
}, {
Day: 'Fri',
EndTime: '{ts \'1970-01-01 18:30:00\'}',
StartTime: '{ts \'1970-01-01 17:30:00\'}'
}]
}];
// Get array ordered by day/time:
const result = byDayTime(schedule);
console.log(result);

.as-console-wrapper { max-height: 100% !important; top: 0; }