ES6查找數組元素下標的兩種方法

直接上代碼

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>ES6查找數組元素下標的兩種方法</title>
</head>

<body>
    <h2>ES6查找數組元素下標的兩種方法</h2>
    <div>
        <h3>方法1:使用for循環遍歷數組查找元素</h3>
        <p>好處:支持自定義比較運算,可以自己定義比較的操作,複合條件的才返回下標。</p>
        <p>壞處:好像沒啥壞處...</p>
    </div>
    <br>
    <div>
        <h3>方法2:使用Array 數組對象的indexOf方法</h3>
        <p>好處:代碼簡潔,直接調用JS的API。</p>
        <p>壞處:有的瀏覽器不支持這種API(IE),需要做兼容性處理。
            另外,indexOf()方法查找的數據查詢基本數據類型的話,基本沒有什麼問題;
            但是查詢複合數據類型,就會存在一些問題。因爲indexOf內部使用的是===嚴格比較運算符,
            如果比較的數據類型不是基本數據類型,是複合數據類型,===運算符就會比較它們的內存地址,如果地址相同,===等式纔會成立。
            因此,複合數據類型不太適合使用indexOf來查詢在數組當中的下標。
        </p>
    </div>
</body>

<script>

    window.onload = function () {
        let arr = [1, 2, 3, 4, 5, 6];
        let arr1 = [
            { "name": "姓名1", "sex": "男" },
            { "name": "姓名2", "sex": "男" },
            { "name": "姓名3", "sex": "男" },
            { "name": "姓名4", "sex": "男" },
            { "name": "姓名5", "sex": "男" },
        ];
        //console.log(indexOf(arr, 3));

        //Array 對象的indexOf方法內部使用的是===嚴格比較運算符,
        //如果比較的數據類型不是基本數據類型,是複合數據類型,===運算符就會比較它們的內存地址,如果地址相同,===等式纔會成立。
        console.log(indexOf(arr1, { "name": "姓名5", "sex": "男" }));    //返回-1
        console.log(indexOf(arr1, arr1[4]));                            //返回4

        console.log(indexOf1(arr, 3));  //返回-2
        console.log(indexOf2(arr, 3));  //返回-2

        console.log(indexOf1(arr1, { "name": "姓名5", "sex": "男" }));    //返回-1
        console.log(indexOf2(arr1, arr1[4]));                            //返回4
    }

    function indexOf(arr, item) {
        if (Array.prototype.indexOf) {
            return arr.indexOf(item);
        } else {
            for (var i = 0; i < arr.length; i++) {
                if (arr[i] === item) {
                    return i;
                }
            }
        }
        return -1;
    }

    //1、使用for循環遍歷數組查找元素
    function indexOf1(arr, item) {
        let index = -1;
        for (let i = 0; i < arr.length; i++) {
            if (item === arr[i]) {
                index = i;
                break;
            }
        }
        return index;
    }

    //2、使用Array 數組對象的indexOf方法
    function indexOf2(arr, item) {
        return arr.indexOf(item);
    }



</script>

</html>

運行結果:

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章