iT邦幫忙

第 11 屆 iT 邦幫忙鐵人賽

DAY 16
1
Modern Web

陣列大亂鬥系列 第 16

Day 14:No More Reason, Just All Result

前言

今天的主題將延續上一篇的內容。

之前有說過用 indexOf()lastIndexOf(),以及 PHP 中的 array_search() 可以查找陣列中指定內容的位置。

但是他們都有一個共同的缺點:找到一個就停了。

所以今天的內容就是要說,要怎麼突破這個困境,確實查找出所有的資料位置。


indexOf()

indexOf() 中查找所有資料位置的方法並沒有改變,只是我們必須動點手腳:找個地方存放找到的資料,所以就會演變成下面的狀況:

// javascript

const ary = [1, 2, 1, 3, 1, 4, 2, 5]
const indexAll = []
let i = 0


while(ary.indexOf(1, i) !== -1) {
    indexAll.push(ary.indexOf(1, i))

    i = ary.indexOf(1, i) + 1
}
console.log(indexAll)

// > [0, 2, 4]

lastIndexOf()

lastIndexOf() 的做法也差不多,不過要記得,因為它是從最末位往前找,所以在 [0] 的時候需要進行處理,不然選用參數變成 -1 之後,又會重新開始找:

// javascript

const ary = [2, 2, 3, 6, 2, 5, 2, 4, 3]
const lastAll = []
let idx = ary.lastIndexOf(2)

while(idx !== -1) {
    lastAll.push(idx)
    idx = (idx > 0) ? ary.lastIndexOf(2, idx - 1) : -1;
}
console.log(lastAll);

// > [6, 4, 1, 0]

array_keys()

PHP 這邊就比較遺憾,array_search() 沒辦法處理查找所有 key 值的情況,所以在這邊會應用到另一個方法 array_keys()

array_keys() 原先的用法是列出所有 key 值,但是因為它有篩選的功能,所以正好可以應用在我們這個主題中:

// php

<?
    $ary = array(
        'apple' => 'A',
        '10' => 'B',
        'peach' => 'A',
        'kiwi' => 'C',
        '0' => 'A',
    );

    print_r(array_keys($ary, 'A'));
    // > Array ( [0] => apple [1] => peach [2] => 0 )
?>

參考資料

以上內容將會不同步發佈在 blogger 中:第 11 屆鐵人賽系列文


大手夥伴們的專欄

歡迎大家也去訂閱一波~~

CSScoke - 金魚都能懂的這個網頁畫面怎麼切 - 金魚都能懂了你還怕學不會嗎
King Tzeng - IoT沒那麼難!新手用JavaScript入門做自己的玩具~
阿斬 - Python 程式交易 30 天新手入門
Clarence - LINE bot 好好玩 30 天玩轉 LINE API
塔塔默 - 用Python開發的網頁不能放到Github上?Lektor說可以!!
Vita Ora - 好 Js 不學嗎 !? JavaScript 入門中的入門。


上一篇
Day 13:Give Me The Index Or Key
下一篇
Day 15:Are There Something Needed?
系列文
陣列大亂鬥30

尚未有邦友留言

立即登入留言