方法有很多種
第一:直接循環,判斷輸出
第二:使用indexOf
正常來說,為了增加工作效率一般會選擇indexOf,但是indexOf存在兼容性問題,因此最完善的寫法如下
function indexOf(arr, item) { if (Array.prototype.indexOf){ //判斷當前瀏覽器是否支持 return arr.indexOf(item);//支持,則直接使用indexOf函數進行輸出 } else { for (var i = 0; i < arr.length; i++){ if (arr[i] === item){ return i; //不支持則進入循環,判斷為真后輸入 } } } return -1;//不管如何,始終返回-1 }
擴展
上面所述數組中的數據類型比較單一,為了支持更多的數據類型我們可以改造一下
function indexOf(arr,item) { if(!arr||!arr.length){ return -1; } //使用let避免遍歷提升 //基於數組長度一個變量存儲,避免每次重復查詢長度,提升性能 let i =0,len = arr.length; for (; i < len; i++) { // 支持 arr[i] 為對象,數組等 if (JSON.stringify(arr[i]) === JSON.stringify(item)) { return i } } return -1; }
接下來還是可以繼續優化的,不過這些優化就是關於js版本上的一些語法優化了,其他方面的優化以俺目前的水平來說尚未察覺