摘要:在做數(shù)據(jù)比對的時候,可以通過嵌套循環(huán),一層循環(huán)遍歷最新數(shù)據(jù)二層循環(huán)遍歷緩存數(shù)據(jù),如果緩存數(shù)據(jù)中對應(yīng)的為,則更改第一層循環(huán)對應(yīng)的值。雖然通過嵌套循環(huán)可以實(shí)現(xiàn)效果,但是循環(huán)的次數(shù)是兩個數(shù)組長度的乘積,當(dāng)數(shù)據(jù)量大的時候,這樣會很耗性能。
工作中經(jīng)常會遇到這樣的需求:
1.購物車列表中勾選某些,點(diǎn)擊任意一項(xiàng),前往詳情頁,再返回購物車依舊需要呈現(xiàn)勾選狀態(tài)
2.勾選人員后,前往別的頁面,再次返回,人員依舊程勾選狀態(tài)
3.等等....
// 緩存數(shù)據(jù) var students = [ { id: 35, name: "小明", age: 25, address: "環(huán)球中心",checked:true}, { id: 36, name: "杰倫", age: 41, address: "中國臺灣" ,checked:true}, { id: 37, name: "不擼死", age: 46, address: "霉國" ,checked:true} ] // 最新數(shù)據(jù) var data = [ { id: 35, name: "小明", age: 25, address: "環(huán)球中心",checked:false }, { id: 36, name: "杰倫", age: 41, address: "中國臺灣" ,checked:false}, { id: 37, name: "不擼死", age: 46, address: "霉國" ,checked:false}, { id: 38, name: "大明", age: 46, address: "哈哈哈哈哈" ,checked:false}, { id: 39, name: "中明", age: 46, address: "中國四川" ,checked:false} ]
離開頁面的時候?qū)⒐催x的數(shù)據(jù)緩存,再次返回到頁面時,將最新添加的數(shù)據(jù)和緩存的數(shù)據(jù)做對比,如果緩存中存在勾選,則更改對應(yīng)的最新數(shù)據(jù)。
在做數(shù)據(jù)比對的時候,可以通過嵌套for循環(huán),一層for循環(huán)遍歷最新數(shù)據(jù),二層for循環(huán)遍歷緩存數(shù)據(jù),如果緩存數(shù)據(jù)中對應(yīng)的checked為true,則更改第一層for循環(huán)對應(yīng)的值。雖然通過嵌套循環(huán)可以實(shí)現(xiàn)效果,但是循環(huán)的次數(shù)是兩個數(shù)組長度的乘積,當(dāng)數(shù)據(jù)量大的時候,這樣會很耗性能。這里推薦另一種辦法,將緩存的數(shù)組轉(zhuǎn)換成Json對象,將唯一的id作為數(shù)組中每一項(xiàng)的key,將數(shù)組的每一項(xiàng)做為value,這樣循環(huán)的時候只需要一層循環(huán)即可。
// 緩存數(shù)據(jù) var students = [ { id: 35, name: "小明", age: 25, address: "環(huán)球中心",checked:true }, { id: 36, name: "杰倫", age: 41, address: "中國臺灣" ,checked:true}, { id: 37, name: "不擼死", age: 46, address: "霉國" ,checked:true} ] // 最新數(shù)據(jù) var data = [ { id: 35, name: "小明", age: 25, address: "環(huán)球中心",checked:false }, { id: 36, name: "杰倫", age: 41, address: "中國臺灣" ,checked:false}, { id: 37, name: "不擼死", age: 46, address: "霉國" ,checked:false}, { id: 38, name: "大名", age: 46, address: "哈哈哈哈哈" ,checked:false}, { id: 39, name: "中明", age: 46, address: "中國四川" ,checked:false} ] // 將數(shù)組轉(zhuǎn)換為json對象 function Array2Json(arr, obj = {}) { arr.forEach(item => { obj[item.id] = item; }) return obj } students = Array2Json(students); // 此處可以用for循環(huán),但是推薦使用while,因?yàn)閣hile比for效率高 let i = 0; while (i < data.length) { if (students[data[i].id]) { data[i].checked = true } i++; } // 最終得到的data就是還原了勾選狀態(tài)的數(shù)據(jù),可以直接渲染在界面上 console.log(data)
寫完了,要下班了,哈哈哈哈
---------------------------------------轉(zhuǎn)載請注明出處------------------謝謝-----------------
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/97407.html
摘要:嵌套對象成員會造成重大性能影響盡量少用。一般來說你可以通過這種方法提高代碼的性能將經(jīng)常使用的對象成員數(shù)組項(xiàng)和域外變量存入局部變量中。在反復(fù)訪問的地方使用局部變量存放引用小心地處理集合因?yàn)樗麄儽憩F(xiàn)出存在性總是對底層文檔重新查詢。 前言 本期我來給大家推薦的書是《高性能JavaScript》,在這本書中我們能夠了解 javascript 開發(fā)過程中的性能瓶頸,如何提升各方面的性能,包括代碼...
摘要:然后執(zhí)行環(huán)境會創(chuàng)建一個活動對象,活動對象作為函數(shù)運(yùn)行的變量對象,包含所有局部變量命名參數(shù)參數(shù)集合和,當(dāng)執(zhí)行環(huán)境銷毀,活動對象也被銷毀。 高性能JavaScript整理總結(jié) 關(guān)于前端性能優(yōu)化:首先想到的是雅虎軍規(guī)34條然后最近看了《高性能JavaScript》大概的把書中提到大部分知識梳理了下并加上部分個人理解這本書有參考雅虎特別性能小組的研究成果,所以跟34 軍規(guī)有很多相似之處有不當(dāng)之...
摘要:然后執(zhí)行環(huán)境會創(chuàng)建一個活動對象,活動對象作為函數(shù)運(yùn)行的變量對象,包含所有局部變量命名參數(shù)參數(shù)集合和,當(dāng)執(zhí)行環(huán)境銷毀,活動對象也被銷毀。 高性能JavaScript整理總結(jié) 關(guān)于前端性能優(yōu)化:首先想到的是雅虎軍規(guī)34條然后最近看了《高性能JavaScript》大概的把書中提到大部分知識梳理了下并加上部分個人理解這本書有參考雅虎特別性能小組的研究成果,所以跟34 軍規(guī)有很多相似之處有不當(dāng)之...
摘要:高性能小結(jié)文章轉(zhuǎn)載于我的博客最近看完了動物叢書的高性能,覺得那本書的小結(jié)部分寫得非常不錯,簡潔輕快易懂概括性很強(qiáng)。由于局部變量存在于作用域鏈的起始位置,因此訪問局部變量比訪問跨作用域變量更快。 高性能javascript小結(jié) 文章轉(zhuǎn)載于我的CSDN博客:http://blog.csdn.net/hello_world_20/article/details/46793317 最近看完了動...
閱讀 1865·2021-11-15 11:39
閱讀 1073·2020-12-03 17:06
閱讀 729·2019-12-27 11:42
閱讀 3267·2019-08-30 13:59
閱讀 1452·2019-08-26 13:22
閱讀 3281·2019-08-26 12:15
閱讀 2471·2019-08-26 10:22
閱讀 1558·2019-08-23 18:40