干開(kāi)發(fā)也有不少年頭了持隧,其實(shí)每個(gè)開(kāi)發(fā)人員應(yīng)該都有總結(jié)和寫技術(shù)點(diǎn)的習(xí)慣谒亦,俗言說(shuō)得好“好記性不如一個(gè)爛筆頭”倔叼。?
我是一枚女程序猿汗唱,很少發(fā)文章,并且我深知這是不對(duì)的丈攒,不管好與壞分享出來(lái)大家一起討論哩罪,總會(huì)把不好的變成好的,窄路變成寬路巡验。哎际插,可能個(gè)人使然,但是發(fā)表出來(lái)的還是很少显设,都是在自己的工作筆記里每次記錄著技術(shù)心得和一些總結(jié)框弛。總覺(jué)得發(fā)表出來(lái)萬(wàn)一不好捕捂,被人取笑了怎么辦瑟枫。總之是一個(gè)愛(ài)多想的女程序員指攒。
最近我以前一個(gè)同事在找工作力奋,她面試了阿里,然后跟我聊了聊幽七,說(shuō)讓我多發(fā)表自己的文章,建立自己的社區(qū)溅呢,最好再多參與一些開(kāi)源項(xiàng)目或者在git上多建一些自己的項(xiàng)目澡屡。這話我以前也聽(tīng)過(guò)猿挚,但是就是執(zhí)行上不徹底啊。
這不驶鹉,我現(xiàn)在必須把自己以前寫好的或者接下來(lái)的每一點(diǎn)技術(shù)總結(jié)也好 經(jīng)驗(yàn)總結(jié)也好绩蜻,都想寫出來(lái),就當(dāng)不為別人看室埋,為自己也行办绝!
話不多說(shuō)了,她給我發(fā)了一道她面試阿里的題姚淆。我自己做了做孕蝉。這是我目前想到的思路和寫法。歡迎有更好更優(yōu)的方案發(fā)出來(lái)腌逢。我也可以學(xué)習(xí)降淮。謝謝~
題目:
篩選筆試題?(請(qǐng)?jiān)诎胄r(shí)內(nèi)完成):
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:'魅藍(lán)note5',?value:?1,?type:?4,?date:?'2018-06-07T08:00:01.589Z'?},
???{name:'魅藍(lán)note2',?value:?5,?type:?4,?date:?'2018-06-02T08:07:01.589Z'?},
???{name:'魅藍(lán)note2',?value:?6,?type:?4,?date:?'2018-06-07T08:00:01.589Z'?},
???{name:'魅藍(lán)note3',?value:?1,?type:?4,?date:?'2018-06-05T08:00:01.589Z'?},
???{name:'魅藍(lán)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'?}
];
/**
*?請(qǐng)用您認(rèn)為最優(yōu)化的方式,將arr中的type為4的數(shù)據(jù)過(guò)濾出來(lái)搏讶,
*?然后按相同的?name?+?date(按天)合并value(value累加)佳鳖,
*?然后按?value?降序(從大到小)排序,
*?最后每行按照?"${name},${本地日期},售出${sum(value)}部"?的格式媒惕,如:"小米2,2017年06月08日,售出5部",?打印(console.log)出來(lái)系吩。
*?可以使用第三方j(luò)s庫(kù),可以使用es6妒蔚。
*?請(qǐng)?jiān)诎胄r(shí)內(nèi)完成穿挨。
要求最后輸出結(jié)果樣例如下:
oppor9,2017年06月04日,售出7部
魅藍(lán)note2,2017年06月07日,售出6部
魅藍(lán)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)
我有注意到時(shí)間那有點(diǎn)差異,題目數(shù)組里給的是2018面睛,讓最后打印出來(lái)是2017年絮蒿,我自己覺(jué)得是打印錯(cuò)了。如果在現(xiàn)場(chǎng)我估計(jì)我會(huì)再問(wèn)一下面試官這里是否不一樣叁鉴。如果真不一樣土涝,程序里在處理一下就行了
好了,此題完結(jié)幌墓。