亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

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

一、indexOf()方法

實現(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));//[, "", "", , , , , , , ]

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

二、sort()+判斷相鄰兩個數(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ù)組

實現(xiàn)思路:for循環(huán)中判斷對象中是否有當(dāng)前項,若沒有則將當(dāng)前項push到新創(chuàng)建的數(shù)組中,同時將當(dā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)前項作為對象的一個屬性賦值為1,比如說數(shù)組中的5,第一次對象中沒有5這個屬性,我們將其push到新數(shù)組中,若不對5這個屬性進行賦值,下次檢測到第二個5時對象中同樣沒有又要將其push到新數(shù)組中。所以這里將當(dāng)前項作為對象的一個屬性賦值為1,當(dāng)然也可以賦值為其他值。說的有點啰嗦,懂得人可以略過……

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

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

實現(xiàn)思路:for循環(huán)中判斷對象中是否有當(dāng)前項,若沒有則將當(dāng)前項作為對象的一個屬性賦值為1,否則當(dā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)來遍歷

實現(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í)。

補充一道面試題:

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

 var str = 'sdt$^uygGTdgabN';
   document.write(str+"<br/>");//將原字符串輸出到文檔
   var j=,reg=/[a-zA-Z]/;//j變量用于計數(shù)、定義一個正則表達式用來判斷是否是字母
   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)前項轉(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運動動畫的八個知識點

    js運動動畫的八個知識點

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

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

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

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

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

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

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

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

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

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

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

    Javascript 鏈?zhǔn)阶饔糜蛟敿毥榻B

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

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

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

    mongoose之bulkWrite操作使用實例

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

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

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

最新評論