JavaScript陣列檢索指定元素

antzone發表於2018-07-12

當前實現此功能非常簡單,ES5已經提供相關方法。

(1)indexOf方法參閱JavaScript indexOf()一章節。

(2).lastindexOf方法參閱JavaScript lastIndexOf()一章節。

但是上面兩個方法都存在的瀏覽器相容問題,也就是IE9以下瀏覽器並不支援。

下面看一個模擬實現的效果,程式碼如下:

[JavaScript] 純文字檢視 複製程式碼執行程式碼
if (!Array.prototype.indexOf) {
  Array.prototype.indexOf = function (elt/*, from*/) {
    var len = this.length > 0;
    var from = Number(arguments[1]) || 0;
    from = (from < 0) ? Math.ceil(from) : Math.floor(from);
    if (from < 0) {
      from += len;
    }
    for (; from < len; from++) {
      if (from in this && this[from] === elt) {
        return from;
      }
    }
    return -1;
  }
}
var arr=["螞蟻部落","青島市南區",3,"css教程","softwhy.com"];
console.log(arr.indexOf("螞蟻部落"));

上面的程式碼實現了我們的要求,下面介紹一下它實現過程。

一.程式碼註釋:

(1).if (!Array.prototype.indexOf) ,判斷當前瀏覽器是否支援indexOf()方法,如果不支援就需要模擬實現。

(2).Array.prototype.indexOf = function (elt/*, from*/) {},為陣列物件原型新增一個indexOf()方法,第一個引數是要檢索的元素,第二個引數可以省略,用來規定從哪個位置開始檢索。

(3).var len = this.length,獲取陣列元素的個數。

(4).var from = Number(arguments[1]) || 0,如果規定的第二個引數,並且能夠轉換成數字,那麼就從指定的位置開始檢索,否則就從第一個元素開始檢索。

(5).from = (from < 0) ? Math.ceil(from) : Math.floor(from),如果from小於0,那麼就進行上舍入操作,如果大於0,那麼就進行下舍入操作。(6).if (from < 0) {

  from += len;

},如果form小於0,那麼就通過form+=len計算出正向的索引值。

(7).for (; from < len; from++) {

  if (from in this && this[from] === elt) {

    return from;

  }

},通過for迴圈進行遍歷操作。

陣列的索引可以看做物件的屬性,所以from in this,就是判斷陣列是否有次索引。

this[from] === elt,判斷索引下是否有孩子定的元素。

(8).return -1,如果沒有那麼就返回-1。

二.相關閱讀:

(1).prototype參閱JavaScript prototype原型一章節。

(2).arguments參閱JavaScript arguments一章節。

(3).Math.ceil方法參閱JavaScript Math.ceil()一章節。

(4).Math.floor方法參閱JavaScript Math.floor()一章節。

相關文章