题目要求:给出一个对象值,里面含有很多个子对象,每个字对象又分别含有name 、score 、time属性。最后要求设计一个方法,按时间从小到大排序输出每个分数大于60分的人的姓名和对应分数。
输入对象举例如下:
{ A:{ name: 'aaa', score: 60, time: 'Mon May 16 2016 18:48:34 GMT+0800 (中国标准时间)' }, B:{ name: 'bbb', score: 50, time: 'Mon May 16 2017 18:48:34 GMT+0800 (中国标准时间)' }, C:{ name: 'ccc', score: 90, time: 'Mon May 16 2018 18:48:34 GMT+0800 (中国标准时间)' }, D:{ name: 'ddd', score: 80, time: 'Mon May 16 2014 18:48:34 GMT+0800 (中国标准时间)' }, E:{ name: 'eee', score: 81, time: 'Mon May 15 2014 18:48:34 GMT+0800 (中国标准时间)' }, F:{ name: 'fff', score: 81, time: 'Mon May 15 2016 18:48:34 GMT+0800 (中国标准时间)' } ... }
方法1思路:先将分数为60分及以下的子对象去掉,剩下的子对象再根据时间值得大小进行排序。注意,时间值需要通过Date.parse()方法转换成毫秒数才能比较。
function objSort(obj){ var arr = Object.keys(obj); var subArr = []; arr.forEach(function(item){ if(obj[item].score>60){ subArr.push(obj[item]); } }); // console.log(subArr); var res = subArr.sort(function(obj1, obj2){ return Date.parse(obj1.time) - Date.parse(obj2.time); }); // console.log(res); for(var i=0; i<res.length; i++){ console.log(res[i].name + ' ' + res[i].score); } } var object = { A:{ name: 'aaa', score: 60, time: 'Mon May 16 2016 18:48:34 GMT+0800 (中国标准时间)' }, B:{ name: 'bbb', score: 50, time: 'Mon May 16 2017 18:48:34 GMT+0800 (中国标准时间)' }, C:{ name: 'ccc', score: 90, time: 'Mon May 16 2018 18:48:34 GMT+0800 (中国标准时间)' }, D:{ name: 'ddd', score: 80, time: 'Mon May 16 2014 18:48:34 GMT+0800 (中国标准时间)' }, E:{ name: 'eee', score: 81, time: 'Mon May 15 2014 18:48:34 GMT+0800 (中国标准时间)' }, F:{ name: 'fff', score: 81, time: 'Mon May 15 2016 18:48:34 GMT+0800 (中国标准时间)' } } objSort(object); // eee 81 // ddd 80 // fff 81 // ccc 90
方法2:直接通过time属性进行排序
function objSort(params){ return function(object1,object2){ return Date.parse(object1[params])-Date.parse(object2[params]); } } function init(obj){ var arr = []; for(item in obj){ if(parseInt(obj[item].score)>60){ arr.push(obj[item]); } } arr.sort(objSort('time')); for(var i=0; i<arr.length; i++){ console.log(arr[i].name + ' ' + arr[i].score); } } var object = { A:{ name: 'aaa', score: 60, time: 'Mon May 16 2016 18:48:34 GMT+0800 (中国标准时间)' }, B:{ name: 'bbb', score: 50, time: 'Mon May 16 2017 18:48:34 GMT+0800 (中国标准时间)' }, C:{ name: 'ccc', score: 90, time: 'Mon May 16 2018 18:48:34 GMT+0800 (中国标准时间)' }, D:{ name: 'ddd', score: 80, time: 'Mon May 16 2014 18:48:34 GMT+0800 (中国标准时间)' }, E:{ name: 'eee', score: 81, time: 'Mon May 15 2014 18:48:34 GMT+0800 (中国标准时间)' }, F:{ name: 'fff', score: 81, time: 'Mon May 15 2016 18:48:34 GMT+0800 (中国标准时间)' } } init(object);