美文网首页前端面试
2019阿里前端面试题

2019阿里前端面试题

作者: catherine单眼皮小眼睛 | 来源:发表于2019-02-22 13:13 被阅读0次

    干开发也有不少年头了,其实每个开发人员应该都有总结和写技术点的习惯,俗言说得好“好记性不如一个烂笔头”。 

    我是一枚女程序猿,很少发文章,并且我深知这是不对的,不管好与坏分享出来大家一起讨论,总会把不好的变成好的,窄路变成宽路。哎,可能个人使然,但是发表出来的还是很少,都是在自己的工作笔记里每次记录着技术心得和一些总结。总觉得发表出来万一不好,被人取笑了怎么办。总之是一个爱多想的女程序员。

    最近我以前一个同事在找工作,她面试了阿里,然后跟我聊了聊,说让我多发表自己的文章,建立自己的社区,最好再多参与一些开源项目或者在git上多建一些自己的项目。这话我以前也听过,但是就是执行上不彻底啊。

    这不,我现在必须把自己以前写好的或者接下来的每一点技术总结也好 经验总结也好,都想写出来,就当不为别人看,为自己也行!

    话不多说了,她给我发了一道她面试阿里的题。我自己做了做。这是我目前想到的思路和写法。欢迎有更好更优的方案发出来。我也可以学习。谢谢~

    题目:

    筛选笔试题 (请在半小时内完成):

    var arr = [

       {name:'小米1', value: 1,  type: 2, date: '2018-06-07T08:00:01.589Z' },

       {name:'锤子T1', value: 1, type: 2, date: '2018-06-07T08:10:01.589Z' },

       {name:'小米2', value: 1, type: 4, date: '2018-06-07T20:00:01.589Z' },

       {name:'小米2', value: 4, type: 4, date: '2018-06-07T20:10:21.189Z' },

       {name:'小米4', value: 1, type: 4, date: '2018-06-07T08:00:01.560Z' },

       {name:'小米4', value: 2, type: 4, date: '2018-06-07T08:10:31.584Z' },

       {name:'小米6', value: 1, type: 3, date: '2018-06-07T08:00:01.589Z' },

       {name:'小米5s',value: 1, type: 4, date: '2018-06-07T08:00:01.589Z' },

       {name:'锤子T2', value: 1, type: 4, date: '2018-06-07T08:00:01.589Z' },

       {name:'锤子T1', value: 4, type: 4, date: '2018-06-07T08:06:01.589Z' },

       {name:'魅蓝note5', value: 1, type: 4, date: '2018-06-07T08:00:01.589Z' },

       {name:'魅蓝note2', value: 5, type: 4, date: '2018-06-02T08:07:01.589Z' },

       {name:'魅蓝note2', value: 6, type: 4, date: '2018-06-07T08:00:01.589Z' },

       {name:'魅蓝note3', value: 1, type: 4, date: '2018-06-05T08:00:01.589Z' },

       {name:'魅蓝note', value: 1, type: 4, date: '2018-06-07T08:00:01.589Z' },

       {name:'oppor9', value: 7, type: 4, date: '2018-06-04T08:04:01.588Z' },

       {name:'华为p9', value: 1, type: 4, date: '2018-06-02T08:00:01.577Z' },

       {name:'华为p9', value: 2, type: 4, date: '2018-06-07T08:00:01.110Z' },

       {name:'华为p10', value: 1, type: 1, date: '2018-06-07T08:00:01.534Z' }

    ];

    /**

    * 请用您认为最优化的方式,将arr中的type为4的数据过滤出来,

    * 然后按相同的 name + date(按天)合并value(value累加),

    * 然后按 value 降序(从大到小)排序,

    * 最后每行按照 "${name},${本地日期},售出${sum(value)}部" 的格式,如:"小米2,2017年06月08日,售出5部", 打印(console.log)出来。

    * 可以使用第三方js库,可以使用es6。

    * 请在半小时内完成。

    要求最后输出结果样例如下:

    oppor9,2017年06月04日,售出7部

    魅蓝note2,2017年06月07日,售出6部

    魅蓝note2,2017年06月02日,售出5部

    小米2,2017年06月08日,售出5部

    ......

    */

    function printArray(arr){

    }

    我的解答:

    function printArray(arr){

        const res = arr.filter(function(item, index, arr){

            item.date = item.date.split('T')[0]

            return item.type === 4

        })

        console.log(res)

        const newArr = []

        const temp = {}

        for(const i in res) {

            const key = `${res[i].name}@${res[i].date}`

            if (temp[key]) {

                temp[key] += res[i].value

            } else {

                temp[key] = res[i].value

            }

        }

        console.log(temp)

        for (const key in temp) {

            const tempObj = {}

            tempObj.name = key.split('@')[0]

            tempObj.date = key.split('@')[1]

            tempObj.value = temp[key]

            newArr.push(tempObj)

        }

        console.log(newArr)

        function compare(prop) {

            return function(a, b){

                const value1 = a[prop]

                const value2 = b[prop]

                return value2 - value1

            }

        }

        newArr.sort(compare('value'))

        console.log(newArr)

        newArr.forEach((item, index) => {

            const printStr = `${item.name},${item.date.split('-')[0]}年${item.date.split('-')[1]}月${item.date.split('-')[2]}日,售出${item.value}部`

            console.log(printStr)

        })

    }

    printArray(arr)

    我有注意到时间那有点差异,题目数组里给的是2018,让最后打印出来是2017年,我自己觉得是打印错了。如果在现场我估计我会再问一下面试官这里是否不一样。如果真不一样,程序里在处理一下就行了

    好了,此题完结。

    相关文章

      网友评论

        本文标题:2019阿里前端面试题

        本文链接:https://www.haomeiwen.com/subject/yjteyqtx.html