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 降序(從大到小)排序,
- 最後每行按照 “{本地日期},售出${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}部`)
})
不知道有沒有更好的解決方案,歡迎交流!