2015-12-17 36 views
0

因此,索引函數將返回可以在數組中找到值的索引,如果數組中沒有值,則返回-1,並且返回當存在多個時可以找到目標的第一個索引火柴。indexOf函數的語法如何工作?

但是爲什麼設置item === target && result === -1,這部分沒有意義?如果數組中的給定值爲真,那麼當result === -1?我們設置了result = index?這部分的目的是什麼......?

順便說一下,我們設置var result = -1爲目標,不能在數組中找到的是正確的?

_.indexOf = function(array, target){ 

    var result = -1; 

    _.each(array, function(item, index) { 
     if (item === target && result === -1) { 
     result = index; 
     } 
    }); 
    return result; 
    }; 
+0

'if =='裏面的'result === -1'只是確保函數只返回第一個匹配。在'each()'回調中找到第一個匹配後,'result === -1'將總是失敗,因爲'result'已經有了另一個值。 – Sirko

+0

這是indexOf的一個不好的實現,讓我們在找到匹配之後繼續循環遍歷所有內容.... – epascarello

+0

@epascarello您能告訴我一個更好的實現方法嗎? – Danny

回答

2

好了,你要的result變量設置爲當前index只有當兩個條件都爲真:

  • 當前item是看着-後target
  • result仍具有初始值-1,即目標具有尚未發現

這樣,result將包含循環後匹配的第一個的索引。

順便說一句,這應該被編碼沒有result變量和_.each環,與正常for循環,早日回到它的速度更快,更容易理解:

_.indexOf = function(array, target) { 
    for (var i=0; i<array.length; i++) { 
     var item = array[i]; 
     if (item === target) { 
      return index; 
     } 
    } 
    return -1; 
}; 
2

如果沒有測試,看看是否result-1那麼它會返回最後匹配的指數,而不是第一比賽。

0

如果您刪除result === -1部分你將有一個不同的函數返回最後一個等於目標的元素的索引。