<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>

          用最簡潔代碼實現(xiàn) indexOf 方法

          共 3022字,需瀏覽 7分鐘

           ·

          2021-03-31 10:31

          面試官也在看的前端面試資料

          indexOf 有兩種:

          String.prototype.indexOf()

          返回從 fromIndex 處開始搜索第一次出現(xiàn)的指定值的索引,如果未找到,返回 -1

          str.indexOf(searchValue [, fromIndex])
          // fromIndex 默認值為 0

          Array.prototype.indexOf()

          返回在數(shù)組中可以找到一個給定元素的第一個索引,如果不存在,則返回 -1

          arr.indexOf(searchElement[, fromIndex])

          解答

          String.prototype.indexOf()

          解題思路:正則,字符串匹配

          function sIndexOf(str, searchStr, fromIndex = 0){
              var regex = new RegExp(`${searchStr}`'ig')
              regex.lastIndex = fromIndex
              var result = regex.exec(str)
              return result ? result.index : -1
          }

          // 測試
          var paragraph = 'The quick brown fox jumps over the lazy dog. If the dog barked, was it really lazy?'
          var searchTerm = 'dog'
          // 測試一:不設(shè)置 fromIndex
          console.log(sIndexOf(paragraph, searchTerm))
          // 40
          console.log(paragraph.indexOf(searchTerm));
          // 40
          // 測試二:設(shè)置 fromIndex
          console.log(sIndexOf(paragraph, searchTerm, 41))
          // 52
          console.log(paragraph.indexOf(searchTerm, 41));
          // 52

          測試成功

          Array.prototype.indexOf()

          解題思路:遍歷匹配

          function aIndexOf(arr, elem, fromIndex = 0){
              if(!elem) return -1
              for(let i = fromIndex; i < arr.length; i++) {
                  if(arr[i] === elem) return i
              }
              return -1
          }

          // 測試
          var beasts = ['ant''bison''camel''duck''bison']
          // 測試一:不設(shè)置 fromIndex
          console.log(aIndexOf(beasts, 'bison'))
          // 1
          console.log(beasts.indexOf('bison'))
          // 1
          // 測試二:設(shè)置 fromIndex
          console.log(aIndexOf(beasts, 'bison'2))
          // 4
          console.log(beasts.indexOf('bison'2))
          // 4

          測試成功

          總結(jié)一下
          function indexOf(items, item, fromIndex = 0{
              let isArray = Array.isArray(items);
              let isString = Object.prototype.toString.call(items) == '[object String]';
              if (!isArray && !isString) throw new SyntaxError();
              if(isArray) return sIndexOf(items, item, fromIndex)
              else return aIndexOf(items, item, fromIndex)
          }

          你也可以嘗試使用遍歷匹配法解決 sIndexOf 問題(正則更簡潔),這里不做介紹(和 aIndexOf 差不多的套路,不同的是,String 類型可以一次匹配多個字符)

          來源:https://github.com/sisterAn/JavaScript-Algorithms

          最后

          歡迎關(guān)注【前端瓶子君】??ヽ(°▽°)ノ?
          回復(fù)「算法」,加入前端算法源碼編程群,每日一刷(工作日),每題瓶子君都會很認真的解答喲
          回復(fù)「交流」,吹吹水、聊聊技術(shù)、吐吐槽!
          回復(fù)「閱讀」,每日刷刷高質(zhì)量好文!
          如果這篇文章對你有幫助,在看」是最大的支持
          》》面試官也在看的算法資料《《
          “在看和轉(zhuǎn)發(fā)”就是最大的支持
          瀏覽 76
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <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>
                  久久成人三级 | 国产乱子伦-区二区三区 | 日韩成人性爱视频 | 国产成人免费在线观看 | 亚洲vo1 |