zoukankan      html  css  js  c++  java
  • 同花顺笔试碰到的一道前端编程题

    题目要求:给出一个对象值,里面含有很多个子对象,每个字对象又分别含有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);
  • 相关阅读:
    优酷土豆的Redis服务平台化之路
    [C#]使用Gembox.SpreadSheet向Excel写入数据及图表
    [C#]使用Join与GroupJoin将两个集合进行关联与分组
    [C#]使用TcpListener及TcpClient开发一个简单的Chat工具
    超棒黑客必备清单
    [C#]使用dnSpy对目标程序(EXE或DLL)进行反编译修改并编译运行
    [C#源代码]使用SCPI指令对通信端口(RS232/USB/GPIB/LAN)进行仪器编程
    [C#]使用Costura.Fody将源DLL合并到目标EXE
    [C#]使用ILMerge将源DLL合并到目标EXE(.NET4.6.2)
    详解C#7.0新特性
  • 原文地址:https://www.cnblogs.com/guorange/p/7598377.html
Copyright © 2011-2022 走看看