摘要:在前端項目對數組,的拷貝,比較中,我們往往會去用,那么這樣做究竟好不好呢經過一系列測試,發現用這種方式的性能是比較差的,下面是實驗結果數組拷貝結果結果結果結果結果我們發現差距在四倍左右,當數組變大基本也維持在這個比例遍歷對比結果結果
在前端項目對數組,map的拷貝,比較中,我們往往會去用json.stringify、json.parse,那么這樣做究竟好不好呢?
經過一系列測試,發現用這種方式的性能是比較差的,下面是實驗結果
const a1 = new Array(1000000).fill("").map((e, index) => index) function f1() { const start = new Date().getTime() const r = JSON.parse(JSON.stringify(a1)) console.log("json結果", new Date().getTime() - start) } function f2() { const start = new Date().getTime() const r = [...a1] console.log("array結果", r == a1, new Date().getTime() - start) } f1() f2()
結果:
json結果 104
array結果 false 35
我們發現差距在四倍左右,當數組變大基本也維持在這個比例
2.遍歷對比const map1 = {} const map2 = {} for (let i=0;i < 1000000;i++) { map1[i] = i map2[i] = i } function f1() { const start = new Date().getTime() const r = JSON.stringify(map1) == JSON.stringify(map2) console.log("json結果", r, new Date().getTime() - start) } function f2() { const start = new Date().getTime() const r = Object.keys(map1).every(key => { if (map2[key] || map2[key] === 0) { return true } else { return false } }) console.log("array結果", r, new Date().getTime() - start) } f1() f2()
結果:
json結果 true 506
array結果 true 140
基本上也是在四倍左右的差距
結尾還有更多的測試沒做,但估計基本上也是這個差距,
其實說到底,用json的api底層也是遍歷過了,并且轉成字符串,所以性能會比較差
大家還是自己手寫的遍歷還是手寫,或者用第三方插件如lodash。不要一味用json api
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/104236.html
摘要:我們一般用來深拷貝,其過程說白了,就是利用將對象序列化字符串,再使用來反序列化還原對象。至于這行代碼為什么能實現深拷貝,以及它有什么局限性等等,不是本文要介紹的。小結論能不用和就不用,采用替代方案且性能更優的。 JSON.parse(JSON.stringify(obj))我們一般用來深拷貝,其過程說白了,就是利用 JSON.stringify 將js對象序列化(JSON字符串),再使...
摘要:說句玩笑話,如果是基于的,可能就叫了,形式可能就是這樣的了,如果這樣,那么可能現在是和比較密切了。此外,還有一個函數,我們較少看到,但是它會影響。 我們先來看一個JS中常見的JS對象序列化成JSON字符串的問題,請問,以下JS對象通過JSON.stringify后的字符串是怎樣的?先不要急著復制粘貼到控制臺,先自己打開一個代碼編輯器或者紙,寫寫看,寫完再去仔細對比你的控制臺輸出,如果有...
摘要:返回一個由原數組中的每個元素調用一個指定方法后的返回值組成的新數組。方法測試數組中的某些元素是否通過了指定函數的測試,返回值非常實用的功能,判斷數組中是否某元素符合特定條件。 ECMAScript 5發布于2009年12月。ECMAscript 5.1版(下文稱ES5)發布于2011年6月,,并且成為ISO國際標準(ISO/IEC 16262:2011) http://www.ecma...
摘要:返回一個由原數組中的每個元素調用一個指定方法后的返回值組成的新數組。方法測試數組中的某些元素是否通過了指定函數的測試,返回值非常實用的功能,判斷數組中是否某元素符合特定條件。 ECMAScript 5發布于2009年12月。ECMAscript 5.1版(下文稱ES5)發布于2011年6月,,并且成為ISO國際標準(ISO/IEC 16262:2011) http://www.ecma...
摘要:深入理解規則字符串化并非嚴格意義上的強制類型轉換,但其中涉及的相關規則基本類型值的字符串化規則為轉換為,轉換為,轉換為。如果對象有自己的方法,字符串化時就會調用該方法并使用其返回值。將對象強制類型轉換為是通過抽象操作來完成的。 [TOC] 序言 最近在看《你所不知道的javascript》[中卷]一書,第一部分是類型和語法。本文是基于這部分的產物。在強制類型轉換->抽象值操作-> to...
閱讀 2954·2021-11-17 09:33
閱讀 3118·2021-11-16 11:52
閱讀 482·2021-09-26 09:55
閱讀 2975·2019-08-30 15:52
閱讀 1313·2019-08-30 15:44
閱讀 1257·2019-08-30 13:59
閱讀 796·2019-08-30 13:08
閱讀 1157·2019-08-30 10:50