国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

JavaScript 手寫代碼 第四期

這篇具有很好參考價值的文章主要介紹了JavaScript 手寫代碼 第四期。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報違法"按鈕提交疑問。

1. 為什么要手寫代碼?

我們在日常開發(fā)過程中,往往都是取出來直接用,從來不思考代碼的底層實(shí)現(xiàn)邏輯,但當(dāng)我開始研究一些底層的東西的時候,才開始理解了JavaScript每個方法和函數(shù)的底層實(shí)現(xiàn)思路,我認(rèn)為這可以很好的提高我們的代碼水平和邏輯思維。

2. 手寫實(shí)現(xiàn)

2.1 數(shù)組扁平化

簡單來說,就是將多維數(shù)組轉(zhuǎn)換為一維數(shù)組

2.1.1 遞歸實(shí)現(xiàn)數(shù)組扁平化

具體思路見注釋

            let arr = [1, 2, [3, 4], [5, [6, 7]]];
            function flat(arr) {
                let result = [];
                for (let i = 0; i < arr.length; i++) {
                    // 判斷數(shù)組的元素是否為數(shù)組
                    if (Array.isArray(arr[i])) {
                        // 如果為數(shù)組,就進(jìn)行遞歸
                        result = result.concat(flat(arr[i]));
                    } else {
                        // 如果不是數(shù)組,直接push到數(shù)組里面
                        result.push(arr[i]);
                    }
                }
                return result;
            }
            console.log(flat(arr)); // [1,2,3,4,5,6]

2.1.2 利用擴(kuò)展運(yùn)算符和數(shù)組方法some

具體思路就是遍歷數(shù)組arr,只要沒有完全拍平,就一直進(jìn)行扁平化操作

            let arr = [1, 2, [3, 4], [5, [6, 7]]];
            function flat(arr) {
                // 主要數(shù)組元素還是多維數(shù)組,就會一直為true,一直指向拍平操作
                while (arr.some((item) => Array.isArray(item))) {
                    arr = [].concat(...arr);
                    console.log(arr);
                }
                return arr;
            }
            console.log(flat(arr));

2.1.3 利用reduce方法進(jìn)行迭代

            let arr = [1, 2, [3, 4], [5, [6, 7]]];
            function flat(arr) {
                return arr.reduce((pre, cur) => {
                    return pre.concat(Array.isArray(cur) ? flat(cur) : cur);
                }, []);
            }
            console.log(flat(arr));

2.1.4 利用toString方法將數(shù)組扁平化

            let arr = [1, 2, [3, 4], [5, [6, 7]]];
            function flat(arr) {
                return arr
                    .toString()
                    .split(',')
                    .map((item) => Number(item));
            }
            console.log(flat(arr));

2.1.5 可以直接使用 ES6 新增的 flat 方法

將數(shù)組扁平化處理,返回一個新數(shù)組,對原數(shù)據(jù)沒有影響

flat()默認(rèn)只會“拉平”一層,如果想要“拉平”多層的嵌套數(shù)組,可以將flat()方法的參數(shù)寫成一個整數(shù),表示想要拉平的層數(shù),默認(rèn)為1

使用示例
使用Infinity(無窮大)拍平

            let arr = [1, 2, [3, 4], [5, [6, 7]]];
            // 一般我們計算要拍平幾層,直接使用Infinity(無窮大)方法
            // 有幾層我便拍平幾層
            function flat(arr) {
                return arr.flat(Infinity);
            }
            console.log(flat(arr)); // [1, 2, 3, 4, 5, 6, 7]

2.1.6 JSON.Stringify實(shí)現(xiàn)和正則表達(dá)式

            let arr = [1, 2, [3, 4], [5, [6, 7]]];
            function flat(arr) {
                // 先價格
                let str = JSON.stringify(arr);
                // 將[和] 都替換為空字符串
                str = str.replace(/(\[|\])/g, '');
                // 然后再兩側(cè)加上[]就成了一維數(shù)組
                str = '[' + str + ']';
                return JSON.parse(str);
            }
            console.log(flat(arr)); // [1, 2, 3, 4, 5, 6, 7]

2.2 實(shí)現(xiàn)交換變量的值(不使用中間變量temp)

成功實(shí)現(xiàn)

            let a = 3,
                b = 1;
            a = a + b;
            b = a - b;
            a = a - b;
            console.log(a); // 1
            console.log(b); // 3

2.3 實(shí)現(xiàn)日期格式化函數(shù)(年月日)

            const dateFormat = function (date, format) {
                let year = date.getFullYear();
                // 月份加一,從0開始
                let month = date.getMonth() + 1;
                let day = date.getDate();
                // 正則替換
                format = format.replace(/YYYY/, year);
                format = format.replace(/MM/, month);
                format = format.replace(/DD/, day);
                return format;
            };
            console.log(dateFormat(new Date(), 'YYYY/MM/DD')); // 2023/6/23
            console.log(dateFormat(new Date(), 'YYYY年MM月DD日')); // 2023年6月23日

date對象我之前有詳細(xì)講過,大家可以看一下 Date對象詳解文章來源地址http://www.zghlxwxcb.cn/news/detail-498388.html

歡迎大家在討論學(xué)習(xí),感謝大家支持

到了這里,關(guān)于JavaScript 手寫代碼 第四期的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 為什么 JavaScript 中的 0.1 + 0.2 不等于 0.3

    為什么 JavaScript 中的 0.1 + 0.2 不等于 0.3

    本文作者為 360 奇舞團(tuán)前端開發(fā)工程師 在使用 JavaScript 處理運(yùn)算時,有時會碰到數(shù)字運(yùn)算結(jié)果不符合預(yù)期的情況,比如經(jīng)典的 0.1 + 0.2 不等于 0.3。當(dāng)然這種問題不只存在于 JavaScript,不過編程語言的一些原理大致相通,我以 JavaScript 為例解釋這種問題,并說明前端如何盡可能

    2024年03月13日
    瀏覽(105)
  • 第四十八章 解讀RGB顏色機(jī)制,在圖像處理中像素值越大意味著什么,OpenCV為什么使用 BGR 顏色格式

    第四十八章 解讀RGB顏色機(jī)制,在圖像處理中像素值越大意味著什么,OpenCV為什么使用 BGR 顏色格式

    RGB三原色起源于上世紀(jì)初1809年Thomas Young提出視覺的三原色學(xué)說,隨后Helmholtz在1824年也提出了三原色學(xué)說:即:視網(wǎng)膜存在三種視錐細(xì)胞,分別含有對紅、綠、藍(lán)三種光線敏感的視色素,當(dāng)一定波長的光線作用于視網(wǎng)膜時,以一定的比例使三種視錐細(xì)胞分別產(chǎn)生不同程度的興

    2024年01月21日
    瀏覽(29)
  • 低代碼是什么意思?企業(yè)為什么要用低代碼平臺?

    低代碼是什么意思?企業(yè)為什么要用低代碼平臺?

    低代碼是什么意思?企業(yè)為什么要用低代碼平臺? 這兩個問題似乎困擾了很多人,總有粉絲跟小簡抱怨, 一天到晚念叨低代碼,倒是來個人解釋清楚?。?來了,這次一文讓你全明白。 在此之前,先了解什么是云計算。 “云” :指的就是互聯(lián)網(wǎng),因?yàn)橹盎ヂ?lián)網(wǎng)(Internet)

    2024年02月07日
    瀏覽(24)
  • 華為云低代碼問答——低代碼為什么這么“香”

    華為云低代碼問答——低代碼為什么這么“香”

    在數(shù)字化轉(zhuǎn)型的大潮中,快速實(shí)現(xiàn)業(yè)務(wù)需求并迅速推出應(yīng)用程序是企業(yè)成功的關(guān)鍵。而低代碼平臺,則成為了開發(fā)者的好幫手,為他們提供了高效、可擴(kuò)展且可靠的開發(fā)解決方案。本期【云享問答】通過這11個問題,帶你熟悉低代碼開發(fā),認(rèn)識華為云低代碼平臺Astro,實(shí)現(xiàn)應(yīng)用

    2024年02月21日
    瀏覽(21)
  • 為什么 Python 代碼在函數(shù)中運(yùn)行得更快?

    哈嘍大家好,我是咸魚 當(dāng)談到編程效率和性能優(yōu)化時,Python 常常被調(diào)侃為“慢如蝸?!?有趣的是,Python 代碼在函數(shù)中運(yùn)行往往比在全局范圍內(nèi)運(yùn)行要快得多 小伙伴們可能會有這個疑問:為什么在函數(shù)中運(yùn)行的 Python 代碼速度更快? 今天這篇文章將會解答大家心中的疑惑 原

    2024年02月08日
    瀏覽(22)
  • 屎山代碼為什么不去重構(gòu)的探討

    屎山代碼為什么不去重構(gòu)的探討

    現(xiàn)在公司的產(chǎn)品,從出生到現(xiàn)在已經(jīng)有十多年了,現(xiàn)在仍然在持續(xù)的功能構(gòu)建中。當(dāng)然我來這里,看代碼才幾天的時間,那是憋得是相當(dāng)難受,看一下,其中的一段比較核心的邏輯的代碼,一張圖截不了,是的,你沒看錯,上千行的一個函數(shù)挺多,里面大量的if else,上面還有

    2024年01月18日
    瀏覽(24)
  • 為什么說低代碼的出現(xiàn)是時代的選擇?

    為什么說低代碼的出現(xiàn)是時代的選擇?

    前言:作為一種軟件開發(fā)工具,低代碼平臺一定程度上提升了企業(yè)的軟件開發(fā)效率,適應(yīng)了整體的數(shù)字化發(fā)展趨勢,故可以看到,低代碼近幾年的熱度不可小覷。 隨著企業(yè)對應(yīng)用程序的開發(fā)和升級需求不斷激增,許多低代碼工具越來越受歡迎,國內(nèi)有各類SaaS、云服務(wù)等廠商

    2024年02月03日
    瀏覽(16)
  • 為什么越來越多公司開始用低代碼開發(fā)?

    為什么越來越多公司開始用低代碼開發(fā)?

    時代洪流的走向,我們無法左右,能夠把握的,只有做好自己。如何在寒冬來之不易的機(jī)會中,生存并且壯大。 不知道大家有沒有發(fā)現(xiàn),今年的低代碼賽道異?;馃?,但火熱的背后才值得思考,市場需求持續(xù)被挖掘,是什么造就了目前諸多低代碼平臺的井噴? 在低代碼應(yīng)用

    2024年02月04日
    瀏覽(25)
  • 代碼的壞味道(二)——為什么建議使用模型來替換枚舉?

    在設(shè)計模型時,我們經(jīng)常會使用枚舉來定義類型,比如說,一個員工類 Employee,他有職級,比如P6/P7。順著這個思路,設(shè)計一個 Level 類型的枚舉: 假設(shè)哪天悲催的打工人畢業(yè)了,需要計算賠償金,簡單算法賠償金=工資*工齡 后來,隨著這塊業(yè)務(wù)邏輯的演進(jìn),其實(shí)公司是家具備

    2024年02月08日
    瀏覽(39)
  • 一行代碼就能完成的事情,為什么要寫兩行?

    一行代碼就能完成的事情,為什么要寫兩行?

    前后端面試題庫 (面試必備) 推薦:★★★★★ 地址:前端面試題庫??web前端面試題庫 VS java后端面試題庫大全 三元運(yùn)算符 用三元運(yùn)算符代替簡單的 if else 改用三元運(yùn)算符,一行就能搞定 復(fù)雜的判斷三元運(yùn)算符就有點(diǎn)不簡單易懂了 判斷 當(dāng)需要判斷的情況不止一個時,第一個

    2023年04月16日
    瀏覽(16)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包