2016-01-08 49 views
-4
var JOURNAL = [ 
     {"events":["carrot","exercise","weekend"],"squirrel":false}, 
     {"events":["bread","pudding","brushed teeth","weekend","touched tree"],"squirrel":false}] 

     function hasEvent(event, entry) { 
      var x = entry.events.indexOf(event) 

      console.log(x) 
      //-1  

     return x != -1; 
    } 
     hasEvent('pizza', JOURNAL[0]) 

例如:JOURNAL [0]中沒有'pizza',因此它返回-1,導致x返回false。「爲什麼indexOf在找不到元素時返回-1」

我明白,如果它沒有找到事件,它會返回-1!

我的問題是爲什麼它返回-1?它背後有什麼理由嗎?

很多謝謝

編輯:問這樣的問題不好嗎?這就是爲什麼我被低估了?抱歉!

+3

如果x!= -1則返回true,否則返回false。 –

+0

檢查文檔:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/indexOf我猜這是爲什麼沒有細節原因。但是,當找不到東西時返回-1是相當常見的 – Patchee

+2

因爲規格說明如此 - http://www.ecma-international.org/ecma-262/5.1/#sec-15.4.4.14 – Abhitalks

回答

2

-1被使用,因爲它是第一個,也是最令人難忘的數字,不能被誤認爲是數組中的實際索引。

任何數字零或更大都可能是一個索引,並且沒有理由通過擁有一些隨機的「幻數」來使事情複雜化。

0
return x != -1; 

這將返回條件語句的結果,
要麼truefalse萬一x不等於-1

0

那是怎樣陣列indexOf在你的榜樣工程

var array = [2, 9, 9]; 
array.indexOf(2);  // 0 
array.indexOf(7);  // -1 

var events = ["carrot","exercise","weekend"]; 
events .indexOf("carrot");  // 0 
events .indexOf("csarrot");  // -1 

你的方法hasEvent()返回xindexOf值超過events

function hasEvent(event, entry) 
{ 
     var x = entry.events.indexOf(event); 
     return x != -1; // if the event was found in entry.events array then it will return the index of the item otherwise -1 
} 
0

indexOf回報-1如果event沒有找到一個數組。所以,x!=-1表示event被發現。

+0

是的,我明白,但我只是想知道爲什麼-1? – Sotra

+0

@Sotra你會寧願它返回什麼數字? – TZHX

+0

只是好奇,如果有任何理由,爲什麼它返回-1 ..但由於沒有人回答這一部分,那麼我想這背後沒有理由。 – Sotra

0

Mozilla Developer

的的indexOf()方法返回在該給定元素可以在陣列中可以發現,或-1,如果它不存在的第一個索引。

考慮到這一點,檢查x != -1意味着存在的event是否在entry.events陣列發現的檢查,換句話說,「返回對象是否在陣列或未找到」。

0

使用indexOf進行數組搜索時,返回元素的索引。在數組中,索引從0開始。所以第一個元素將有索引0依次類推......

但是,如果找不到該元素,則返回-1

所以當你說x != -1,這意味着搜索元素存在於數組中。

作爲每Array - MDN

JavaScript數組被零索引:陣列的第一個元素的索引爲0,而最後一個元素是索引處等於陣列的長度屬性減去1的值。

有關indexOf的更多信息,請檢查MDN

0

我的問題是爲什麼它返回-1?

因爲這是如何在功能array.indexOf指定:

的的indexOf()方法返回在該給定元素可以在陣列中可以發現,或-1,如果它不存在的第一個索引。來源:Array.prototype.indexOf

背後有什麼理由嗎?

有一個合乎邏輯的原因:JavaScript中的數組是0索引的。因此,範圍(0,...,array.length_1)中的所有值都是有效的索引值,即當元素在數組中時可能返回。返回array.length意味着找不到會比較尷尬,因爲它會強制調用者總是檢查array.length來解釋該值。

因此,-1總是顯而易見的值來表示找不到,因爲它永遠不是有效的索引值。

x!= -1是什麼意思?

這意味着功能hasEvent將返回true如果參數event被發現,false如果不是。