<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

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

          共 8964字,需瀏覽 18分鐘

           ·

          2022-02-13 12:47

          作者:前端小智

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

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


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


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


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


          • 減少代碼行

          • Coding Competitions

          • 增加摸魚(yú)的時(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)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  亚洲国产AV天堂 | 国精产品高潮呻吟久久久… | 欧美黄色免费第一看 | 人人插人人操人人射 | 黄色电影网站日韩 |