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 降序(從大到小)排序,
  • 最後每行按照 “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}部`)
})

不知道有沒有更好的解決方案,歡迎交流!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章