摘要:希望索引值之間用隔開,而最后的索引值后面無。優(yōu)化代碼這個判斷用于防止最后一個索引值后面還有結(jié)果查看其實(shí)用來跳出循環(huán)一直覺得不太規(guī)范。。。小實(shí)驗(yàn)是顯示次數(shù)其實(shí)就是那個索引值啦,這次顯示的是字符哦涉及到字符,就要用到方法。
第一篇技術(shù)文章寫些簡單點(diǎn)的~
在大三上web前端開發(fā)課程時,雖然能用JavaScript制作一些簡單的頁面動態(tài)效果,但其實(shí)很多JS知識并未掌握,所以自己又通過視頻再復(fù)習(xí)一次JS。(我的JS書籍還在來的路上,在此之前,讓我先用“在線課程”這種快餐充饑~)
JS內(nèi)置對象中String字符串對象有太多方法了,今天通過2個簡單實(shí)驗(yàn),熟悉indexOf()、lastIndexOf()、charAt()3個方法的使用。
首先來看看w3school里是怎么介紹indexOf()的
語法:
Object(string|array).indexOf(searchValue, fromIndex);
用法:
返回某個指定的字符串值在字符串中首次出現(xiàn)的位置
兩大參數(shù):
參數(shù)1 searchValue 必需。規(guī)定需檢索的字符串值
參數(shù)2 fromIndex 可選。規(guī)定在字符串中開始檢索的位置。它的合法取值是0到stringObject.length-1。如省略該參數(shù),則將從字符串的首字符開始檢索。
然后學(xué)習(xí)時所給demo實(shí)在是太簡單了吧。。-.-!!!
第一個由于原字符串有此一系列完整且連續(xù)的字符,于是輸出位置為6,注意空格也占一個字符位置哦~
第二個由于沒有,所以輸出-1
這里注意了~返回值是數(shù)字(索引),在后面提及的小實(shí)驗(yàn)中索引index的定義非常關(guān)鍵。
---------------小實(shí)驗(yàn)1---------------實(shí)在接受不了如此直白的demo,于是仔細(xì)想想到底這個方法能用來做什么?
下面是一個我覺得很有效但自己卻很少用到的深入學(xué)習(xí)法
1、indexOf是找到首次出現(xiàn)的位置。。(首先多次理解這個定義)
2、那如果這是一個游戲。。(從感興趣的方向作為切入點(diǎn),聯(lián)想實(shí)際生活)
3、游戲規(guī)則是需要找出一句話中"l"字母出現(xiàn)的所有位置。。(將其具體化)
而indexOf()只會找一次,那要如何設(shè)計?
于是二話不說,幾行代碼就寫出來了,非常的迅速!
刷新頁面一看,oh my god?。ㄏ旅媸沁\(yùn)行結(jié)果)
22222222222
這么簡單的程序都不會寫,真得好好檢討一下!T.T
問題出在哪里呢?首先是定義一個字符串str,然后for循環(huán)讓它每找到一個"l"字母就輸出該字母所在位置,但是為何每次都輸出2?
沒錯,關(guān)鍵就是那個index索引!
愚蠢的我以為i++就代表起始查找位置在后移,其實(shí)真正起作用的是索引index。
另外,還有一點(diǎn)!就是indexOf()方法中的參數(shù)2,剛才我的錯誤代碼中,indexOf()是只有參數(shù)1的,參數(shù)2默認(rèn)為字符串首字符位置,即要從頭開始尋找。
又沒有索引值,又每次都得從頭找,還要for循環(huán),不出現(xiàn)一堆2才怪呢~
正確做法結(jié)果如下:
239
但是這樣并不好看,嘗試優(yōu)化。希望索引值之間用“、”隔開,而最后的索引值后面無“、”。這時需要用到indexOf()的兄弟方法lastIndexOf(),只要記住用法和indexOf()完全相反,省略參數(shù)2則從字符串最后一個字符開始尋找,直到找到指定字符的最后出現(xiàn)位置。
優(yōu)化代碼:
結(jié)果查看:
2、3、9
其實(shí)用break來跳出循環(huán)一直覺得不太規(guī)范。。。網(wǎng)上看到有用do-while()方法感覺更好。。
PS:要注意indexOf()對大小寫要求很高,一開始沒留意,寫成indexof(),一直沒效果,后來才發(fā)現(xiàn)原來o要大寫。。香菇~ ---------------小實(shí)驗(yàn)2---------------如果將游戲顯示簡化一點(diǎn)又要怎么設(shè)計呢?現(xiàn)在已有的游戲規(guī)則是數(shù)有多少個"l"字母,然后說出每個的位置。
現(xiàn)在增加難度,要顯示次數(shù)最多的字符。
小實(shí)驗(yàn)1是顯示次數(shù)(其實(shí)就是那個索引值啦0.0),這次顯示的是字符哦~涉及到字符,就要用到charAt()方法。
同樣的,首先在看看w3school有什么想說的
語法:
stringObject.charAt(index);
用法:
返回指定位置的字符
參數(shù):
index 必需。表示字符串中某個位置的數(shù)字,即字符在字符串中的下標(biāo)。
這一次涉及到for in的用法,這里要和for循環(huán)做一個區(qū)分。
for - 循環(huán)代碼塊一定的次數(shù) for/in - 循環(huán)遍歷對象的屬性
遍歷對象的屬性,在這次實(shí)驗(yàn)里,由于要找出哪個字符次數(shù)最多,所以要遍歷的是字符(對象)的次數(shù)(屬性)。
簡單例子:
var a=["aa","bb","cc"]; for(var c in a){ document.write(a[c]); }
結(jié)果為:
aabbcc
在了解for in用法后開始編寫~
思路如下:
1、首先得創(chuàng)建一個對象obj
2、for循環(huán)時用charAt()方法把每個字符塞到char中,obj[char]相當(dāng)于“該字符的次數(shù)”
3、每次循環(huán)時更新對應(yīng)字符次數(shù)
4、定義次數(shù)最多的字符max
5、for in循環(huán)遍歷次數(shù),與obj里每個字母對應(yīng)的次數(shù)進(jìn)行比較,輸出最多次數(shù)所對應(yīng)的字符
展示各個字符及對應(yīng)的次數(shù),代碼如下:
輸出結(jié)果:
h:1 次 e:1 次 l:1 次 l:2 次 o:1 次 :1 次 w:1 次 o:2 次 r:1 次 l:3 次 d:1 次
可以說實(shí)驗(yàn)2已經(jīng)完成了一半,接下來是for in循環(huán)遍歷次數(shù),找次數(shù)最多的出來!后續(xù)代碼如下:
var max=0;//次數(shù)最多,初始化為0,防止undefined var maxChar; for(char in obj){ if(max次數(shù)最多的字符是"+maxChar); document.write("
一共出現(xiàn)了"+max+" 次");
看起來行得通,結(jié)果卻不盡如人意啊T.T
次數(shù)最多的字符是d 一共出現(xiàn)了3 次
為什么次數(shù)最多的字符是d。。。但又竟然是3次??明明d只出現(xiàn)1次,而l才是出現(xiàn)了3次。。咋就混在一起了呢。。。當(dāng)時的我竟然想笑。。。
仔細(xì)回看代碼,會發(fā)現(xiàn)if-else語句有點(diǎn)奇怪,按順序執(zhí)行的話,"hello world"首先是h字母次數(shù),次數(shù)為1,max 換言之,根本不需要else語句,當(dāng)更新max的同時,也要更新maxChar,對號入座,才不會有“牛頭不搭馬嘴”這種尷尬情況的發(fā)生。。。 完整代碼如下:(由于我們要的只是最終結(jié)果,所以“列舉每個字母及對應(yīng)的次數(shù)”這一步可省略) 第一篇文章就用了我3小時。。。只想說一句。。好累!雖然這只是JS中一個很小的知識,不過還是挺有意義的~ 最后感謝博客園用戶!master的這篇文章,js--找字符串中出現(xiàn)最多的字符,實(shí)在沒想到有人會和我想到一塊去了。實(shí)驗(yàn)2就是受這篇文章的啟發(fā)的。
————WEB前端學(xué)習(xí),需要我們多看書多敲碼多思考
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.hztianpu.com/yun/91126.html
摘要:最近在看語言精粹這本書,建立完整的知識體系。一關(guān)于語言是一門未在實(shí)驗(yàn)室打磨過的語言,存在這很多考慮不全面甚至,因此我們很有必要學(xué)習(xí)本書,已達(dá)到去除糟粕,取其精華的效果。則為定義了,為初始化的變量。為對象,數(shù)組函數(shù)均屬于特殊的對象。 最近在看JavaScript語言精粹這本書,建立完整的js知識體系。 一.關(guān)于JavaScript語言js是一門未在實(shí)驗(yàn)室打磨過的語言,存在這很多考慮不全面...
摘要:固有對象由標(biāo)準(zhǔn)規(guī)定,隨著運(yùn)行時創(chuàng)建而自動創(chuàng)建的對象實(shí)例。普通對象由語法構(gòu)造器或者關(guān)鍵字定義類創(chuàng)建的對象,它能夠被原型繼承。 筆記說明 重學(xué)前端是程劭非(winter)【前手機(jī)淘寶前端負(fù)責(zé)人】在極客時間開的一個專欄,每天10分鐘,重構(gòu)你的前端知識體系,筆者主要整理學(xué)習(xí)過程的一些要點(diǎn)筆記以及感悟,完整的可以加入winter的專欄學(xué)習(xí)【原文有winter的語音】,如有侵權(quán)請聯(lián)系我,郵箱:ka...
摘要:固有對象由標(biāo)準(zhǔn)規(guī)定,隨著運(yùn)行時創(chuàng)建而自動創(chuàng)建的對象實(shí)例。普通對象由語法構(gòu)造器或者關(guān)鍵字定義類創(chuàng)建的對象,它能夠被原型繼承。 筆記說明 重學(xué)前端是程劭非(winter)【前手機(jī)淘寶前端負(fù)責(zé)人】在極客時間開的一個專欄,每天10分鐘,重構(gòu)你的前端知識體系,筆者主要整理學(xué)習(xí)過程的一些要點(diǎn)筆記以及感悟,完整的可以加入winter的專欄學(xué)習(xí)【原文有winter的語音】,如有侵權(quán)請聯(lián)系我,郵箱:ka...
摘要:固有對象由標(biāo)準(zhǔn)規(guī)定,隨著運(yùn)行時創(chuàng)建而自動創(chuàng)建的對象實(shí)例。普通對象由語法構(gòu)造器或者關(guān)鍵字定義類創(chuàng)建的對象,它能夠被原型繼承。 筆記說明 重學(xué)前端是程劭非(winter)【前手機(jī)淘寶前端負(fù)責(zé)人】在極客時間開的一個專欄,每天10分鐘,重構(gòu)你的前端知識體系,筆者主要整理學(xué)習(xí)過程的一些要點(diǎn)筆記以及感悟,完整的可以加入winter的專欄學(xué)習(xí)【原文有winter的語音】,如有侵權(quán)請聯(lián)系我,郵箱:ka...
閱讀 2825·2021-11-15 11:37
閱讀 2974·2021-09-23 11:21
閱讀 3086·2021-09-07 10:11
閱讀 3249·2019-08-30 15:53
閱讀 2907·2019-08-29 15:13
閱讀 1674·2019-08-26 13:57
閱讀 1180·2019-08-26 12:23
閱讀 2516·2019-08-26 11:51