同花順筆試碰到的一道前端編程題

題目要求:給出一個對象值,裏面含有不少個子對象,每一個字對象又分別含有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);
相關文章
相關標籤/搜索