干開發也有不少年頭了,其實每個開發人員應該都有總結和寫技術點的習慣,俗言說得好“好記性不如一個爛筆頭”。?
我是一枚女程序猿,很少發文章,并且我深知這是不對的,不管好與壞分享出來大家一起討論,總會把不好的變成好的,窄路變成寬路。哎,可能個人使然,但是發表出來的還是很少,都是在自己的工作筆記里每次記錄著技術心得和一些總結。總覺得發表出來萬一不好,被人取笑了怎么辦??傊且粋€愛多想的女程序員。
最近我以前一個同事在找工作,她面試了阿里,然后跟我聊了聊,說讓我多發表自己的文章,建立自己的社區,最好再多參與一些開源項目或者在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年,我自己覺得是打印錯了。如果在現場我估計我會再問一下面試官這里是否不一樣。如果真不一樣,程序里在處理一下就行了
好了,此題完結。