ES6查找数组元素下标的两种方法

    xiaoxiao2023-10-02  143

    直接上代码

    <!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>

    运行结果:

     

     

     

     

    最新回复(0)