1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        20個(gè) Javascript 技巧,提高我們的摸魚時(shí)間!

        共 8964字,需瀏覽 18分鐘

         ·

        2022-02-13 12:47

        作者:前端小智

        簡(jiǎn)介:思否百萬(wàn)閱讀,勵(lì)志退休后,回家擺地?cái)偟娜?/span>

        來(lái)源:SegmentFault  思否社區(qū) 


        使用方便有用的方法,以減少代碼行數(shù),提高我們的工作效率,增加我們的摸魚時(shí)間。


        在我們的日常任務(wù)中,我們需要編寫函數(shù),如排序、搜索、尋找惟一值、傳遞參數(shù)、交換值等,所以在這里分享一下我工作多年珍藏的幾個(gè)常用技巧和方法,以讓大家增加摸魚的時(shí)間。


        這些方法肯定會(huì)幫助你:


        • 減少代碼行

        • Coding Competitions

        • 增加摸魚的時(shí)間

         

        1.聲明和初始化數(shù)組



        我們可以使用特定的大小來(lái)初始化數(shù)組,也可以通過(guò)指定值來(lái)初始化數(shù)組內(nèi)容,大家可能用的是一組數(shù)組,其實(shí)二維數(shù)組也可以這樣做,如下所示:

        const array = Array(5).fill(''); 
        // 輸出
        (5) [""""""""""]

        const matrix = Array(5).fill(0).map(() => Array(5).fill(0))
        // 輸出
        (5) [Array(5), Array(5), Array(5), Array(5), Array(5)]
        0: (5) [0, 0, 0, 0, 0]
        1: (5) [0, 0, 0, 0, 0]
        2: (5) [0, 0, 0, 0, 0]
        3: (5) [0, 0, 0, 0, 0]
        4: (5) [0, 0, 0, 0, 0]
        length: 5

        2. 求和,最小值和最大值



        我們應(yīng)該利用 reduce 方法快速找到基本的數(shù)學(xué)運(yùn)算。

        const array  = [5,4,7,8,9,2];

        求和

        array.reduce((a,b) => a+b);
        // 輸出: 35

        最大值

        array.reduce((a,b) => a>b?a:b);
        // 輸出: 9

        最小值

        array.reduce((a,b) => a<b?a:b);
        // 輸出: 2

        3.排序字符串,數(shù)字或?qū)ο蟮葦?shù)組



        我們有內(nèi)置的方法sort()reverse()來(lái)排序字符串,但是如果是數(shù)字或?qū)ο髷?shù)組呢

        字符串?dāng)?shù)組排序

        const stringArr = ["Joe""Kapil""Steve""Musk"]
        stringArr.sort();
        // 輸出
        (4) ["Joe""Kapil""Musk""Steve"]

        stringArr.reverse();
        // 輸出
        (4) ["Steve""Musk""Kapil""Joe"]

        數(shù)字?jǐn)?shù)組排序

        const array  = [40, 100, 1, 5, 25, 10];
        array.sort((a,b) => a-b);
        // 輸出
        (6) [1, 5, 10, 25, 40, 100]

        array.sort((a,b) => b-a);
        // 輸出
        (6) [100, 40, 25, 10, 5, 1]

        對(duì)象數(shù)組排序

        const objectArr = [ 
            { first_name: 'Lazslo', last_name: 'Jamf'     },
            { first_name: 'Pig',    last_name: 'Bodine'   },
            { first_name: 'Pirate', last_name: 'Prentice' }
        ];
        objectArr.sort((a, b) => a.last_name.localeCompare(b.last_name));
        // 輸出 
        (3) [{…}, {…}, {…}]
        0: {first_name: "Pig", last_name: "Bodine"}
        1: {first_name: "Lazslo", last_name: "Jamf"}
        2: {first_name: "Pirate", last_name: "Prentice"}
        length: 3

        4.從數(shù)組中過(guò)濾到虛值



        像 0, undefined, null, false, "", ''這樣的假值可以通過(guò)下面的技巧輕易地過(guò)濾掉。

        const array = [3, 0, 6, 7, ''false];
        array.filter(Boolean);


        // 輸出
        (3) [3, 6, 7]

        5. 使用邏輯運(yùn)算符處理需要條件判斷的情況



        function doSomething(arg1){ 
            arg1 = arg1 || 10; 
        // 如果arg1沒(méi)有值,則取默認(rèn)值 10
        }

        let foo = 10;  
        foo === 10 && doSomething(); 
        // 如果 foo 等于 10,剛執(zhí)行 doSomething();
        // 輸出: 10

        foo === 5 || doSomething();
        // is the same thing as if (foo != 5) then doSomething();
        // Output: 10

        6. 去除重復(fù)值



        const array  = [5,4,7,8,9,2,7,5];
        array.filter((item,idx,arr) => arr.indexOf(item) === idx);
        // or
        const nonUnique = [...new Set(array)];
        // Output: [5, 4, 7, 8, 9, 2]

        7. 創(chuàng)建一個(gè)計(jì)數(shù)器對(duì)象或 Map



        大多數(shù)情況下,可以通過(guò)創(chuàng)建一個(gè)對(duì)象或者M(jìn)ap來(lái)計(jì)數(shù)某些特殊詞出現(xiàn)的頻率。


        let string = 'kapilalipak';

        const table={}; 
        for(let char of string) {
          table[char]=table[char]+1 || 1;
        }
        // 輸出
        {k: 2, a: 3, p: 2, i: 2, l: 2}

        或者

        const countMap = new Map();
          for (let i = 0; i < string.length; i++) {
            if (countMap.has(string[i])) {
              countMap.set(string[i], countMap.get(string[i]) + 1);
            } else {
              countMap.set(string[i], 1);
            }
          }
        // 輸出
        Map(5) {"k" => 2, "a" => 3, "p" => 2, "i" => 2, "l" => 2}


        8. 三元運(yùn)算符很酷



        function Fever(temp) {
            return temp > 97 ? 'Visit Doctor!'
              : temp < 97 ? 'Go Out and Play!!'
              : temp === 97 ? 'Take Some Rest!''Go Out and Play!';;
        }

        // 輸出
        Fever(97): "Take Some Rest!" 
        Fever(100): "Visit Doctor!"

        9. 循環(huán)方法的比較



        • for for..in 默認(rèn)獲取索引,但你可以使用arr[index]。

        • for..in也接受非數(shù)字,所以要避免使用。

        • forEachfor...of 直接得到元素。

        • forEach 也可以得到索引,但 for...of 不行。


        10. 合并兩個(gè)對(duì)象



        const user = { 
         name: 'Kapil Raghuwanshi'
         gender: 'Male' 
         };
        const college = { 
         primary: 'Mani Primary School'
         secondary: 'Lass Secondary School' 
         };
        const skills = { 
         programming: 'Extreme'
         swimming: 'Average'
         sleeping: 'Pro' 
         };

        const summary = {...user, ...college, ...skills};

        // 合并多個(gè)對(duì)象
        gender: "Male"
        name: "Kapil Raghuwanshi"
        primary: "Mani Primary School"
        programming: "Extreme"
        secondary: "Lass Secondary School"
        sleeping: "Pro"
        swimming: "Average"

        11. 箭頭函數(shù)



        箭頭函數(shù)表達(dá)式是傳統(tǒng)函數(shù)表達(dá)式的一種替代方式,但受到限制,不能在所有情況下使用。因?yàn)樗鼈冇性~法作用域(父作用域),并且沒(méi)有自己的thisargument,因此它們引用定義它們的環(huán)境。

        const person = {
        name: 'Kapil',
        sayName() {
            return this.name;
            }
        }
        person.sayName();
        // 輸出
        "Kapil"

        但是這樣:

        const person = {
        name: 'Kapil',
        sayName : () => {
            return this.name;
            }
        }
        person.sayName();
        // Output
        "

        12. 可選的鏈



        const user = {
          employee: {
            name: "Kapil"
          }
        };
        user.employee?.name;
        // Output: "Kapil"
        user.employ?.name;
        // Output: undefined
        user.employ.name
        // 輸出: VM21616:1 Uncaught TypeError: Cannot read property 'name' of undefined

        13.洗牌一個(gè)數(shù)組



        利用內(nèi)置的Math.random()方法。

        const list = [1, 2, 3, 4, 5, 6, 7, 8, 9];
        list.sort(() => {
            return Math.random() - 0.5;
        });
        // 輸出
        (9) [2, 5, 1, 6, 9, 8, 4, 3, 7]
        // 輸出
        (9) [4, 1, 7, 5, 3, 8, 2, 9, 6]

        14.雙問(wèn)號(hào)語(yǔ)法



        const foo = null ?? 'my school';
        // 輸出: "my school"

        const baz = 0 ?? 42;
        // 輸出: 0

        15.剩余和展開(kāi)語(yǔ)法



        function myFun(a,  b, ...manyMoreArgs) {
           return arguments.length;
        }
        myFun("one""two""three""four""five""six");

        // 輸出: 6



        const parts = ['shoulders''knees']; 
        const lyrics = ['head', ...parts, 'and''toes']; 

        lyrics;
        // 輸出: 
        (5) ["head""shoulders""knees""and""toes"]

        16.默認(rèn)參數(shù)



        const search = (arr, low=0,high=arr.length-1) => {
            return high;
        }
        search([1,2,3,4,5]);

        // 輸出: 4

        17. 將十進(jìn)制轉(zhuǎn)換為二進(jìn)制或十六進(jìn)制



        const num = 10;

        num.toString(2);
        // 輸出: "1010"
        num.toString(16);
        // 輸出: "a"
        num.toString(8);
        // 輸出: "12"


        18. 使用解構(gòu)來(lái)交換兩個(gè)數(shù)



        let a = 5;
        let b = 8;
        [a,b] = [b,a]

        [a,b]
        // 輸出
        (2) [8, 5]

        19. 單行的回文數(shù)檢查



        function checkPalindrome(str) {
          return str == str.split('').reverse().join('');
        }
        checkPalindrome('naman');
        // 輸出: true

        20.將Object屬性轉(zhuǎn)換為屬性數(shù)組



        const obj = { a: 1, b: 2, c: 3 };

        Object.entries(obj);
        // Output
        (3) [Array(2), Array(2), Array(2)]
        0: (2) ["a", 1]
        1: (2) ["b", 2]
        2: (2) ["c", 3]
        length: 3

        Object.keys(obj);
        (3) ["a""b""c"]

        Object.values(obj);
        (3) [1, 2, 3]


        ~完,我是小智,我們下期見(jiàn)!



        點(diǎn)擊左下角閱讀原文,到 SegmentFault 思否社區(qū) 和文章作者展開(kāi)更多互動(dòng)和交流,掃描下方”二維碼“或在“公眾號(hào)后臺(tái)回復(fù)“ 入群 ”即可加入我們的技術(shù)交流群,收獲更多的技術(shù)文章~

        - END -


        瀏覽 43
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        評(píng)論
        圖片
        表情
        推薦
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            欧美老妇激情视频第19页 | 小早川怜子绝顶狂潮 | 国产艹b视频 | 91人妻中文字幕 | 操逼的视频自创国产 | 久久色在线观看 | 亚洲日韩中文字幕在线 | 日韩无码 中文字幕 | 夜夜爽夜夜叫夜夜高潮漏水 | 色com|