2019阿里前端面试题

2019阿里前端面试题
题目:筛选笔试题 (请在半小时内完成):
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 降序(从大到小)排序,
  • 最后每行按照 “ n a m e , {name}, 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部…

我的方案如下:

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' }];
var resArr = arr.filter((item) => item.type === 4);
var m = {};
resArr.forEach((item) => {
    var date = new Date(item.date);
    var fD = new Date(`${date.getFullYear()}/${date.getMonth()+1}/${date.getDay()}`).getTime()
    var key = `${item.name}$${fD}`;
    if(m[key]) {
        m[key] += item.value
    } else {
        m[key] = item.value
    }
})
var nArr = []
Object.entries(m).forEach((item) => {
    var cc = item[0].split('$');
    nArr.push({
        date: cc[1],
        name: cc[0],
        value: item[1]
    })
})
nArr.sort((a, b) => b.value-a.value);

nArr.forEach((item) => {
     var date = new Date(Number(item.date));
    console.log(`${item.name},${date.getFullYear()}年${date.getMonth()+1}月${date.getDay()}日,售出${item.value}部`)
})

不知道有没有更好的解决方案,欢迎交流!

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值