iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 22
0
Modern Web

JavaScript初心者ノ研究日記。系列 第 22

二十二日目:JavaScript ⑅indexOf ⑅lastIndexOf ⑅find ⑅findIndex ノ章

((꜆꜄ ˙-˙ )꜆꜄꜆ 接招!
晚安 ⑅ 我是 SONYKO

 

今天星巴巴推出萬聖節貓貓周邊♡♡
身為貓奴的我也買了一個小杯杯
結果看起來超像香爐 ...

https://ithelp.ithome.com.tw/upload/images/20201005/201295064mxo1RfCMf.jpg
 

延續昨天、今天也要介紹陣列 ( ˙꒳˙ᐢ )
今天介紹項目:

  • indexOf ( )
  • lastIndexOf ( )
  • find ( ) * ES6
  • findIndex ( ) * ES6

 
成為陣列王者的路途還很遙遠。
事不宜遲! レッツゴー!✧

 


⑅ indexOf ( )

主要用來檢索 文 字 列 ( string )。
文字列喔 ( ˙꒳˙ᐢ )⑅

 

先來看公式:

/* (變數名).indexOf( 參數一 , 參數二 ) */
  • 參數一:你想檢索的字串
  • 參數二:你要從哪開始檢索( 輸入數字 )、沒輸入的話預設為 0 。

 

看起來好像很簡單、但還是有些奇妙的地方。
來看範例:

// 你要檢索的字串
let pokemon = '呆呆獸, 皮卡, 種子, 沼王, 噴否龍'

// let 一個檢索結果
let pkm_index = pokemon.indexOf('皮')

consoel.log(pkm_index)  // 5

欸!為什麼是 5 啊!
陣列裡面他是第 1 筆啊你騙人 (゚Д゚# )

大哥、冷靜!
你看清楚差不是陣列 ( 陷阱題 )

https://ithelp.ithome.com.tw/upload/images/20201005/20129506rstboGZdn8.png

所以空格和逗號 都算一個字元喔!

這次加入第二個參數、
我們再看這個飯膩:

let pokemon = '呆呆獸, 皮卡, 種子, 沼王, 噴否龍, 種子'

// 我們要找種子、從第10個字元開始找。
let pkm_index = pokemon.indexOf('種子',10)

console.log(pkm_index)  // 22

雖然說是搜尋第10個字元之後的種子、
最後 console 出來的結果還是會重頭開始數哩。

然後再注意一點就是:字元也是從 0 開始數。

 

那來把 indexOf 用在 陣列上看看吧。
畢竟我們是要成為陣列大濕 ( ˙꒳˙ᐢ )

let boyfriend = ['荒牧慶彦','鳴上嵐','山田次郎','月岡紬']
let bf_index = boyfriend.indexOf('鳴上嵐')

console.log (bf_index) 	// 1

おおお! 是我們熟悉的結果!
陣列與字串不同、陣列是一筆一筆數。

 

阿這邊參數一定要打出完整一筆內容喔
中文不太好、所以我們再來看一個範例:

let boyfriend = ['荒牧慶彦','鳴上嵐','山田次郎','月岡紬']
let bf_index = boyfriend.indexOf('山田')

console.log (bf_index) 	// -1

-1 是什麼 ? 倒數第二筆的意思嗎

不是、這邊 -1 是找不到結果的意思。
因為我沒有完整的打出「山田次郎」、所以他搜尋不到符合的項目。

 

⑅ 結論:

  • 如果今天要檢索字串、連標點符號也算一個字元
  • 找不到符合的項目會回傳 -1
  • 搜尋陣列的話要打出完整一筆內容,否則找不到
  • 第二個參數為「要從哪開始搜尋」、
    但最後得到的結果會是從頭開始數滴。

 

⑅ 最後一個重點:
   第二個參數可以代入負數。( 陣列only , 字串統一回傳 -1 )
   但他的最後一筆是 -1 並不是 0 歐 !要注意一下。

https://ithelp.ithome.com.tw/upload/images/20201005/20129506NBWVSJL6N7.png
 
 
回合終了。 EXP + 500 。
 


⑅ lastIndexOf ( )

他跟 indexOf 有 87% 像、
為什麼多了個 last 呢? 因為他是 從後面開始檢索

公式:

/* (變數名).indexOf( 參數一 , 參數二 ) */
  • 參數一:一樣輸入你想搜尋的東西。
  • 參數二:你要從哪開始檢索( 輸入數字 )、他會搜尋這個數字 以前 的項目。
        也可以帶入負數。跟上個介紹的一樣、陣列 or 字串字元 最尾端是 -1 。

  

我們先從只有一個參數的例子開始看:

let pokemon = '皮卡, 種子, 噴否龍, 種子'
let pkm_index = pokemon.lastIndexOf('種子')
console.log(pkm_index)    // 13

因為他是從後面往前檢索、
所以這邊的種子是噴否龍後面的種子。
一樣記得逗號 和 空白鍵 也算在字元內 ( ˙꒳˙ᐢ )

 

再來看進階範例:

/* 1 */
let pokemon = '皮卡, 種子, 噴否龍, 種子'
let pkm_index = pokemon.lastIndexOf('種子',3)
console.log(pkm_index)    // -1

還記得如果搜尋不到結果、會回傳 -1 嗎
那這邊為什麼會找不到呢?

3 的位置是 種子前面的空白鍵、
lastIndexOf 是從你選到的位置往前檢索,因為前面沒有種子所以回傳 -1 。

 

/* 2 - 1 */
let pokemon = ['皮卡', '種子', '噴否龍', '種子']
let pkm_index = pokemon.lastIndexOf('種子',-1)
console.log(pkm_index)   // 3

/* 2 - 2 */
let pokemon = ['皮卡', '種子', '噴否龍', '種子']
let pkm_index = pokemon.lastIndexOf('種子',2)
console.log(pkm_index)   // 1

只有陣列、第二個參數才能代負數進去歐。
然後 陣列最尾端是 -1 ,要小心陷阱 (U 'ᴗ' U)

關於 indexOf 和 lastIndexOf 的介紹就到這邊 。
 
 

EXP + 200 ♡♡♡


⑅ find ( ) *ES6

他只會回傳一次値給你。
回傳的是 第一個符合判斷條件 的元素。

範例:

let cats = [
	{
		name : 'miu',
		age : 11
	},{
		name : '肥貓',
		age : 8
	},{
		name : '瘦貓',
		age : 5
	}	
]

let findCat = cats.find(function(i){
	return i.name == 'miu'
})
console.log(findCat)
			// Object {
					  age: 11,
					  name: "miu"
					}

上面這個範例大概可以看出他怎麼用吧!
函式參數名稱( i ) 可以自定義。
然後要記得 return ( ˙꒳˙ᐢ )

阿這個範例沒有講到什麼叫做 只回傳一次値、
所以我們來看下面這個例子:

let cats = [
	{
		name : 'miu',
		age : 11
	},{
		name : '肥貓',
		age : 8
	},{
		name : '瘦貓',
		age : 5
	}	,{
		name : '肥貓',
		age : 1
	}
]

let findCat = cats.find(function(i){
	return i.name == '肥貓'
})
console.log(findCat)
	// Object {
		  age: 8,
		  name: "肥貓"
		}

我們陣列裡有兩個肥貓物件、
但檢索出來只得到最上面的肥貓 。
因為他只會 回傳一次値

 


⑅ findIndex ( ) *ES6

怎麼又是 index

不過看到 index 你大概會感覺到
他回傳的東西應該是 檢索的位置( 數字 )。

那這個語法的觀念就是 find + index
只會回傳一次値、
找不到値也會回傳 -1 ( ˙꒳˙ᐢ )♪

看到ES6 大家可能都會想到「 箭頭函式 」
其實 find 和 findIndex( ) 通常也會搭配箭頭函式。
但因為我的鐵人賽還沒寫到、所以這邊一樣用傳統函式。

 

直接來看範例:

let cats = [
	{
		name : 'miu',
		age : 11
	},{
		name : '肥貓',
		age : 8
	},{
		name : '瘦貓',
		age : 5
	}	,{
		name : '肥貓',
		age : 1
	}
]

// 找出肥貓在陣列第幾項
let findCat = cats.findIndex(function(i){
	return i.name == '肥貓'
})
console.log (findCat)  // 1 (雖然陣列1 3 都是肥貓、但只會回傳一筆)

/* 注目!! */
const result = cats[findCat]
console.log (result)
	// Object {
		  age: 8,
		  name: "肥貓"
		}

wow 太狂惹吧! 那還需要 find 嗎
對啊、findIndex 事實上就比 find 還要萬能。

那來看看回傳 -1 的情形:

/* 呈上面陣列 */

let findCat = cats.findIndex(function(i){
	return i.name == '噴否龍'
})
console.log(findCat)

const result = cats[findCat]

if(findCat===-1){
	console.log(`沒這鬼東西`)
}  

因為上面陣列沒有噴否龍、所以會回傳 -1 。
下面 if 條件符合、因此回傳 ' 沒這鬼東西 ' 。

所以 findIndex 和 if 也是好朋友 ( ˙꒳˙ᐢ )♪
 
 
Level Up ↑↑↑ ✧


 
明天先來講個箭頭函式好了。
然後再繼續朝著陣列王者之路前進 ⑅
 

じゃあねー ♪♪
 


୨୧(U 'ᴗ' U) SONYKO的 前端日文小教室 ♡

 
(音檔離家出走)
音檔回家了
 

 日本語   平仮名   中・英   羅馬拼音 
 検索する   けんさくする   搜尋、檢索   Ken sa ku Su ru 
 返り値   かえりち   回傳値   Ka e ri Chi 
 上書き   うわがき   覆蓋   U wa ga ki 
 省略   しょうりゃく   省略   Shou Rya ku 
 アロー関数   あろーかんすう   箭頭函式   Aro- Kan suu 
 インデックス       index 索引   In De kku su 
 先頭   せんとう   最前端   Sen Tou 
 添字   そえじ   索引 index (和式用語)   So E Ji 
 
⑅ 条件に一致する要素の値を取得する
 → 取得符合條件的元素的値
 
其實我有點忘記自己打過什麼單字了(ˉ ˘ ˉ; )
原諒我ㄉ腦容量不足 555

上一篇
二十一日目:JavaScript ⑅unshift  ⑅splice  ⑅sort  ⑅copyWithin  ⑅fill ノ章
下一篇
二十三日目:JavaScript ES6:箭頭函式 アロー関数ノ章
系列文
JavaScript初心者ノ研究日記。30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言