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

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

          共 2963字,需瀏覽 6分鐘

           ·

          2021-03-27 07:04

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

          indexOf 有兩種:

          String.prototype.indexOf()

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

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

          Array.prototype.indexOf()

          返回在數(shù)組中可以找到一個(gè)給定元素的第一個(gè)索引,如果不存在,則返回 -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
          }

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

          測(cè)試成功

          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
          }

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

          測(cè)試成功

          總結(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 問題(正則更簡(jiǎn)潔),這里不做介紹(和 aIndexOf 差不多的套路,不同的是,String 類型可以一次匹配多個(gè)字符)

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

          最后

          歡迎關(guān)注「三分鐘學(xué)前端」,回復(fù)「交流」自動(dòng)加入前端三分鐘進(jìn)階群,每日一道編程算法面試題(含解答),助力你成為更優(yōu)秀的前端開發(fā)!

          》》面試官也在看的前端面試資料《《
          “在看和轉(zhuǎn)發(fā)”就是最大的支持
          瀏覽 59
          點(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>
                  国产高清免费操逼 | 国产成人大香蕉在线免费 | 开心激情网站 | 激情欧美成人 | 中文字幕永久免费 |