詳解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í)有所幫助,也希望大家多多支持腳本之家。
- JS實現(xiàn)字符串去重及數(shù)組去重的方法示例
- JS實現(xiàn)的字符串?dāng)?shù)組去重功能小結(jié)
- js字符串去重復(fù)id的實現(xiàn)代碼
- javascript 實現(xiàn)字符串反轉(zhuǎn)的三種方法
- javascript 不用reverse實現(xiàn)字符串反轉(zhuǎn)的代碼
- 字符串反轉(zhuǎn)_JavaScript
- 一個JavaScript遞歸實現(xiàn)反轉(zhuǎn)數(shù)組字符串的實例
- JavaScript實現(xiàn)反轉(zhuǎn)字符串的方法詳解
- javascript實現(xiàn)字符串反轉(zhuǎn)的方法
- JS算法教程之字符串去重與字符串反轉(zhuǎn)
相關(guān)文章
JavaScript 事件流、事件處理程序及事件對象總結(jié)
JS與HTML之間的交互通過事件實現(xiàn),事件就是文檔或瀏覽器窗口中發(fā)生的一些特定的交互瞬間,可以使用(或處理程序)來預(yù)定事件,以便事件發(fā)生時執(zhí)行相應(yīng)的代碼,本文將介紹JS事件相關(guān)的基礎(chǔ)知識,2017-04-04javascript HTML+CSS實現(xiàn)經(jīng)典橙色導(dǎo)航菜單
這篇文章主要介紹了javascript HTML+CSS實現(xiàn)經(jīng)典橙色導(dǎo)航菜單的相關(guān)資料,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2016-02-02JS限制input框只能輸入0~100的正整數(shù)的兩種方法
本文給大家分享兩種方法實現(xiàn)JS限制input框只能輸入0~100的正整數(shù),方法二是直接通過設(shè)置三個屬性,type、min、max即可,就可以設(shè)置0~100的整數(shù),感興趣的朋友跟隨小編一起看看吧2024-02-02