同花顺笔试碰到的一道前端编程题

题目要求:给出一个对象值,里面含有不少个子对象,每一个字对象又分别含有name 、score 、time属性。最后要求设计一个方法,按时间从小到大排序输出每一个分数大于60分的人的姓名和对应分数。spa

输入对象举例以下:设计

{
    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()方法转换成毫秒数才能比较。code

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);