摘要:現(xiàn)有一堆數(shù)據(jù),我需要按時間進行分組,以便前端視圖呈現(xiàn)需轉(zhuǎn)化為如下原始方法,網(wǎng)絡(luò)一大堆遍歷原始數(shù)組如果沒有則在新中添加遍歷如查找到符合則添加跳出循環(huán)運行效率遍歷個約,總覺得不優(yōu)雅,而且沒用到的特性,于是
現(xiàn)有一堆數(shù)據(jù),我需要按時間進行分組,以便前端視圖呈現(xiàn)
[ {"date":"2017-12-22","start_time":"10:00:00","end_time":"10:00:00","status":"Performance Time"}, {"date":"2017-12-22","start_time":"10:40:00","end_time":"10:40:00","status":"Performance Time"}, {"date":"2017-12-23","start_time":"10:00:00","end_time":"10:00:00","status":"Performance Time"}, {"date":"2017-12-23","start_time":"10:40:00","end_time":"10:40:00","status":"Performance Time"} ]
需轉(zhuǎn)化為如下
[ { date: "2017-12-22", data: [ { date: "2017-12-22", start_time: "10:00:00", end_time: "10:00:00", status: "Performance Time" }, { date: "2017-12-22", start_time: "10:40:00", end_time: "10:40:00", status: "Performance Time" } ] }, { date: "2017-12-23", data: [ { date: "2017-12-23", start_time: "10:00:00", end_time: "10:00:00", status: "Performance Time" }, { date: "2017-12-23", start_time: "10:40:00", end_time: "10:40:00", status: "Performance Time" } ] } ]1.原始方法,網(wǎng)絡(luò)一大堆
var map = {}, nList = [] //遍歷原始數(shù)組 for (var i = 0; i < arr.length; i++) { var item = arr[i] //如果map沒有則在新nList中添加 if (!map[item.date]) { nList.push({ date: item.date, data: [item] }) map[item.date] = item } else { //遍歷nList for (var j = 0; j < nList.length; j++) { var nItem = nList[j]、 //如查找到date符合則添加 if (nItem.date == item.date) { nItem.data.push(item) //跳出循環(huán) break } } } }
運行效率:遍歷1000個約3ms,總覺得不優(yōu)雅,而且沒用到ES5的特性,于是決定自己優(yōu)化一下!
2.使用ES5特性將for替換為forEach和every
let map = {}, nList = [] arr.forEach((item) => { if (!map[item.date]) { nList.push({ date: item.date, data: [item] }) map[item.date] = item } else { //因為forEach不支持break,所以使用every實現(xiàn) nList.every((nItem) => { if (nItem.date === item.date) { nItem.data.push(item) return false } return true }) } })
性能優(yōu)化50%,約1.5ms!
3.性能優(yōu)化實踐因為我的數(shù)組中的date是按順序排列,而且沒有重復(fù),這樣可以考慮去除第二個循環(huán)
let map = {}, nList = [] //設(shè)置初始key為0 let _nkey = 0 arr.forEach((item, index) => { if (index === 0) { nList.push({ date: item.date, data: [item] }) } else { let oItem = arr[index - 1] //和前一個date一致則在當(dāng)前添加,否則添加至nList if (item.date === oItem.date) { nList[_nkey]["data"].push(item) } else { nList.push({ date: item.date, data: [item] }) _nkey ++ } } })
效率再次優(yōu)化50%,約1ms!
項目最終效果:文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/92298.html
摘要:序列化為字符串之后它的各個屬性已經(jīng)被解除了引用,重新相當(dāng)于創(chuàng)建了一個新的對象。類似于的,的命令行終端。基本思路函數(shù)的使用以及協(xié)議。 多行注釋的陷阱 由于正則表達式字面量的存在,多行注釋可能會產(chǎn)生陷阱,例如以下程序?qū)伋鲥e誤: /* var a = /h*/.test(hello); */ 正則結(jié)束前的那個星號將被解析為注釋結(jié)束符,從而.被認為是不合法的.所以盡量避免使用多行注釋 整型 ...
摘要:當(dāng)執(zhí)行上下文被創(chuàng)建時,它的作用域鏈初始化為當(dāng)前運行函數(shù)的屬性中的對象。該過程搜索執(zhí)行環(huán)境的作用域鏈,查找同名的標識符。搜索實例成員比從字面量或局部變量中讀取數(shù)據(jù)代價更高,再加上遍歷原型鏈帶來的開銷,這讓性能問題更為嚴重。 最近在閱讀這本Nicholas C.Zakas(javascript高級程序設(shè)計作者)寫的最佳實踐、性能優(yōu)化類的書。記錄下主要知識。 加載和執(zhí)行 腳本位置 放在中的...
摘要:當(dāng)執(zhí)行上下文被創(chuàng)建時,它的作用域鏈初始化為當(dāng)前運行函數(shù)的屬性中的對象。該過程搜索執(zhí)行環(huán)境的作用域鏈,查找同名的標識符。搜索實例成員比從字面量或局部變量中讀取數(shù)據(jù)代價更高,再加上遍歷原型鏈帶來的開銷,這讓性能問題更為嚴重。 最近在閱讀這本Nicholas C.Zakas(javascript高級程序設(shè)計作者)寫的最佳實踐、性能優(yōu)化類的書。記錄下主要知識。 加載和執(zhí)行 腳本位置 放在中的...
摘要:前言本文主要是有關(guān)前端方面知識按照目前的認知進行的收集歸類概括和整理,涵蓋前端理論與前端實踐兩方面。 前言:本文主要是有關(guān)前端方面知識按照 XX 目前的認知進行的收集、歸類、概括和整理,涵蓋『前端理論』與『前端實踐』兩方面。本文會告訴你前端需要了解的知識大致有什么,看上去有很多,但具體你要學(xué)什么,還是要 follow your heart & follow your BOSS。 初衷...
摘要:前言本文主要是有關(guān)前端方面知識按照目前的認知進行的收集歸類概括和整理,涵蓋前端理論與前端實踐兩方面。 前言:本文主要是有關(guān)前端方面知識按照 XX 目前的認知進行的收集、歸類、概括和整理,涵蓋『前端理論』與『前端實踐』兩方面。本文會告訴你前端需要了解的知識大致有什么,看上去有很多,但具體你要學(xué)什么,還是要 follow your heart & follow your BOSS。 初衷...
閱讀 2556·2021-09-22 15:25
閱讀 2963·2021-09-14 18:03
閱讀 1212·2021-09-09 09:33
閱讀 1700·2021-09-07 09:59
閱讀 2930·2021-07-29 13:50
閱讀 1500·2019-08-30 15:44
閱讀 1715·2019-08-29 16:22
閱讀 1287·2019-08-29 12:49