最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解JS去重及字符串奇數(shù)位小寫轉(zhuǎn)大寫

 更新時間:2016年12月29日 08:25:21   作者:daicunya  
本篇文章主要介紹了詳解JS去重及字符串奇數(shù)位小寫轉(zhuǎn)大寫 ,非常具有實(shí)用價值,需要的朋友可以參考下。

面試中經(jīng)常會考到數(shù)組的去重。作為一名合格的前端開發(fā)者,不知道幾種去重方法是在不應(yīng)該。廢話不多說直接開擼……

一、indexOf()方法

實(shí)現(xiàn)思路:使用indexOf()方法來判斷新數(shù)組中是否有這個值,若沒有則將這個值push到數(shù)組中

 //先定義一個數(shù)組
 var arr = [,'','',,,,,,,,];
 function remov(array) {
    var arr=[];
    for (var i=,len=array.length;i<len;i++){
      if (arr.indexOf(array[i])==-){
        arr.push(array[i])
      }
    }
    return arr;
 }
 console.log(remov(arr));//[, "", "", , , , , , , ]

代碼很簡單,說明一點(diǎn)indexOf()是ES5中的方法,不兼容IE8一下,所以用之前考慮下兼容性問題。

二、sort()+判斷相鄰兩個數(shù)

實(shí)現(xiàn)思路:先使用數(shù)組的sort()方法將數(shù)組升序排序,再判斷相鄰的兩個數(shù)是否相等,若不相等則將前面的數(shù)push到新創(chuàng)建的數(shù)組中

 var arr = [,'','',,,,,,,,];
 function remov(array) {
     var linArr = [];
     array.sort();
     for (var i = , len = array.length; i < len; i++) {
       if (array[i + ] !== array[i]) {
         linArr.push(array[i])
       }
     }
     return linArr;
   }
   console.log(remov(arr));//["", , , , , "", , , , ]

三、創(chuàng)建一個空對象和一個空數(shù)組

實(shí)現(xiàn)思路:for循環(huán)中判斷對象中是否有當(dāng)前項(xiàng),若沒有則將當(dāng)前項(xiàng)push到新創(chuàng)建的數(shù)組中,同時將當(dāng)前項(xiàng)作為對象的一個屬性賦值為1

 var arr = [,'','',,,,,,,,];
 function remov(array) {
     var res = [];
     var obj={};
     for (var i=;i<array.length;i++){
       if(!obj[array[i]]){
         res.push(array[i]);
         obj[array[i]]=;
       }
     }
     return res;
   }
   console.log(remov(arr));//[, "", "", , , , , , ]

至于這里為什么將當(dāng)前項(xiàng)作為對象的一個屬性賦值為1,比如說數(shù)組中的5,第一次對象中沒有5這個屬性,我們將其push到新數(shù)組中,若不對5這個屬性進(jìn)行賦值,下次檢測到第二個5時對象中同樣沒有又要將其push到新數(shù)組中。所以這里將當(dāng)前項(xiàng)作為對象的一個屬性賦值為1,當(dāng)然也可以賦值為其他值。說的有點(diǎn)啰嗦,懂得人可以略過……

大家有咩有注意到第三種方法的字符串'4'與數(shù)值4這里判斷不了,有點(diǎn)小缺憾吧。

四、這種方法與第三種方法借鑒的第三種方法

實(shí)現(xiàn)思路:for循環(huán)中判斷對象中是否有當(dāng)前項(xiàng),若沒有則將當(dāng)前項(xiàng)作為對象的一個屬性賦值為1,否則當(dāng)前項(xiàng)++。在for循環(huán)完畢后再用for in遍歷對象中的屬性

 var arr = [,'','',,,,,,,,]; 
 function remov(array) {
     var obj = {};
     var res = [];
     for (var i=;i<array.length;i++){
       if(!obj[array[i]]){
         obj[array[i]]=;
       }else{
         obj[array[i]]++;
       }
     }
     for (var k in obj){
       res.push(k);//b.這里將遍歷的對象屬性push到新創(chuàng)建的數(shù)組中
 //      console.log(k);//a.直接將遍歷的對象的屬性打印出來
     }
     return res;//b.這里返回新創(chuàng)建的數(shù)組
   }
   console.log(remov(arr));//b.這里將remov(arr)函數(shù)的執(zhí)行結(jié)果打印出來["", "", "", "", "", "", "", "", ""]
 //  remov(arr);//a

這種方法有個小疑問:注釋里面有a的是將遍歷的對象屬性直接打印出來結(jié)果如下圖

注釋里面的b是將遍歷的對象的屬性push到新創(chuàng)建的數(shù)組中,結(jié)果打印出來的數(shù)組中都是字符串。

五、兩個for循環(huán)來遍歷

實(shí)現(xiàn)思路:這種方法因該是用的比較多的吧,創(chuàng)建一個空數(shù)組,第一次for循環(huán)中將一個數(shù)組值存到變量item中,在第二次for循環(huán)中將新建數(shù)組的值與變量比較,若相等則break,第二個for循環(huán)完畢后再判斷新建數(shù)組的長度是否與第二個循環(huán)中的j變量相等,若相等則將第一次循環(huán)中的item添加到新建的數(shù)組中

 var arr = [,'','',,,,,,,,];
 function remov(array) {
     var res = [];
     for (var i=,len=array.length;i<len;i++){
       var item = array[i];
       for (var j=;j<res.length;j++){
         if (res[j]==item){
           break;
         }
       }
       if (res.length==j){
         res.push(item);
       }
     }
     return res;
   }
   console.log(remov(arr));//[, "", "", , , , , , ]

當(dāng)然還有很多其他的數(shù)組去重方法,這里就整理了這么多,有錯誤或不當(dāng)之處請指出,大家共同探討學(xué)習(xí)。

補(bǔ)充一道面試題:

題目描述:對輸入的一串字符串從1開始順序編號,如果遇到奇數(shù)的小寫英文字母,則轉(zhuǎn)換成對應(yīng)的大寫字母.若遇到非英文字母字符,不計(jì)入奇偶數(shù),但結(jié)果要保留該字符

 var str = 'sdt$^uygGTdgabN';
   document.write(str+"<br/>");//將原字符串輸出到文檔
   var j=,reg=/[a-zA-Z]/;//j變量用于計(jì)數(shù)、定義一個正則表達(dá)式用來判斷是否是字母
   var sArr = str.split("");//將字符串轉(zhuǎn)換成數(shù)組
   for (var i=;i<sArr.length;i++){
     if(reg.test(sArr[i])){//如果是字母j++
       j+=;
       if (j%==){//如果是奇數(shù)將當(dāng)前項(xiàng)轉(zhuǎn)換成大寫
           sArr[i] = sArr[i].toUpperCase();
       }
     }
   }
   str = sArr.join('');//將數(shù)組轉(zhuǎn)換成字符串
   document.write(str);//將轉(zhuǎn)換后的字符串輸出到文檔

附上轉(zhuǎn)換前與轉(zhuǎn)換后的字符串對比圖

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • js運(yùn)動動畫的八個知識點(diǎn)

    js運(yùn)動動畫的八個知識點(diǎn)

    本文給大家分享的是個人在學(xué)習(xí)js運(yùn)動動畫的過程中總結(jié)的我們需要注意的8個知識點(diǎn),分別是速度動畫、透明度漸變、緩沖運(yùn)動、多物體運(yùn)動、獲取樣式、任意屬性值、鏈?zhǔn)竭\(yùn)動和同時運(yùn)動,非常的詳細(xì),推薦給小伙伴們。
    2015-03-03
  • 淺談JavaScript暫時性死區(qū)與垃圾回收機(jī)制

    淺談JavaScript暫時性死區(qū)與垃圾回收機(jī)制

    本文主要介紹了淺談JavaScript暫時性死區(qū)與垃圾回收機(jī)制,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-05-05
  • js檢測網(wǎng)絡(luò)是否具體連接功能的代碼

    js檢測網(wǎng)絡(luò)是否具體連接功能的代碼

    這篇文章主要介紹了js如何實(shí)現(xiàn)檢測網(wǎng)絡(luò)是否具體連接功能 ,需要的朋友可以參考下
    2014-05-05
  • JavaScript 事件流、事件處理程序及事件對象總結(jié)

    JavaScript 事件流、事件處理程序及事件對象總結(jié)

    JS與HTML之間的交互通過事件實(shí)現(xiàn),事件就是文檔或?yàn)g覽器窗口中發(fā)生的一些特定的交互瞬間,可以使用(或處理程序)來預(yù)定事件,以便事件發(fā)生時執(zhí)行相應(yīng)的代碼,本文將介紹JS事件相關(guān)的基礎(chǔ)知識,
    2017-04-04
  • javascript HTML+CSS實(shí)現(xiàn)經(jīng)典橙色導(dǎo)航菜單

    javascript HTML+CSS實(shí)現(xiàn)經(jīng)典橙色導(dǎo)航菜單

    這篇文章主要介紹了javascript HTML+CSS實(shí)現(xiàn)經(jīng)典橙色導(dǎo)航菜單的相關(guān)資料,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-02-02
  • 基于JS實(shí)現(xiàn)飛機(jī)大戰(zhàn)游戲的示例代碼

    基于JS實(shí)現(xiàn)飛機(jī)大戰(zhàn)游戲的示例代碼

    這篇文章主要為大家詳細(xì)介紹了如何利用JS實(shí)現(xiàn)飛機(jī)大戰(zhàn)游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • Javascript 鏈?zhǔn)阶饔糜蛟敿?xì)介紹

    Javascript 鏈?zhǔn)阶饔糜蛟敿?xì)介紹

    這篇文章主要介紹了Javascript 鏈?zhǔn)阶饔糜蛟敿?xì)介紹的相關(guān)資料,需要的朋友可以參考下
    2017-02-02
  • js 判斷一個元素是否在頁面中存在

    js 判斷一個元素是否在頁面中存在

    js 判斷一個元素是否存在此功能在項(xiàng)目中很實(shí)用,本人搜集整理了一些常用技巧,需要了解的朋友可以參考下
    2012-12-12
  • mongoose之bulkWrite操作使用實(shí)例

    mongoose之bulkWrite操作使用實(shí)例

    這篇文章主要為大家介紹了mongoose之bulkWrite操作使用實(shí)例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-09-09
  • JS限制input框只能輸入0~100的正整數(shù)的兩種方法

    JS限制input框只能輸入0~100的正整數(shù)的兩種方法

    本文給大家分享兩種方法實(shí)現(xiàn)JS限制input框只能輸入0~100的正整數(shù),方法二是直接通過設(shè)置三個屬性,type、min、max即可,就可以設(shè)置0~100的整數(shù),感興趣的朋友跟隨小編一起看看吧
    2024-02-02

最新評論

福安市| 周宁县| 东乡族自治县| 长岭县| 怀宁县| 天水市| 会同县| 麦盖提县| 巴青县| 集贤县| 繁昌县| 韶山市| 蕉岭县| 革吉县| 延寿县| 潞城市| 昌黎县| 伊宁市| 襄垣县| 普定县| 荆门市| 奈曼旗| 马山县| 磴口县| 昭通市| 双峰县| 忻州市| 郴州市| 微博| 栖霞市| 桃园县| 资中县| 合江县| 都安| 婺源县| 恩平市| 乌恰县| 垣曲县| 泰来县| 南靖县| 百色市|