2017-03-17 69 views
0

我已經查找無處不在和所有這個論壇。有人可以幫忙嗎?基本上,indexOf在存儲的變量上返回-1。我很可能錯過了一些簡單的東西,但我似乎無法找到它。Stump - indexOf在存儲變量上返回-1

var t1 = { 

    "properties" : [ 
     { 
      "id": 1, 
      "streetName" : "N. 10th", 
      "blockNo": "5800", 
      "addresses" : [5800, 5801, 5802, 5803, 5804, 5005], 
      "home": [5802] 
     }, 
     { 
      "id": 2, 
      "streetName" : "N. 10th", 
      "blockNo": "5900", 
      "addresses" : [5900, 5901, 5902, 5903, 5904, 5905], 
      "home" : [5904, 5905] 
     } 
    ] 
} 


var myProp = t1.properties; 

var list = myProp[0].addresses; 

var atHome = myProp[0].home; 

var homeIndex = list.indexOf(atHome); 


document.write(homeIndex); //returns -1. Why is this when the others work? 
document.write(atHome); //returns 5802 
document.write(list.indexOf(5802)); //returns 2, which is what I'm looking for. 

的jsfiddle是在這裏 - https://jsfiddle.net/qmn7h7pb/ 很簡單,但是當瓦爾被交換不起作用。如果換出var

homeIndex = list.indexOf(5802),它返回2(正確)。
homeIndex = list.indexOf(atHome)返回-1。 (不正確)

任何人都可以解釋這一點嗎?

+1

因爲'document.write(atHome);'將'atHome'數組強制轉換爲字符串。您應該在代碼中執行'var homeIndex = list.indexOf(atHome [0]);''。 – Redu

+1

Thx,但如果我知道索引號,那麼就不需要indexOf()函數。但是,下面找到了答案。我覺得這是一個簡單的修復,但非常重要。 Thx爲您提供幫助。 – user3112937

+0

如果你使用'document.write'或'alert'或者其他方法來記錄日誌而不是'console.log',你應該總是*把值放在'JSON.stringify(...)' – Bergi

回答

0

其實myProp[0].home返回字符串並在陣列中的所有元素都是整數,所以,你需要在轉換爲int然後檢查,在這裏改變

var atHome = parseInt (myProp[0].home); 

演示:https://jsfiddle.net/qmn7h7pb/1/

+1

謝謝你,真是太棒了!我知道這很簡單,但我從來沒有想過這種細微差別。你是男人。如果可以的話,我會贊成你 – user3112937

0

您必須遍歷如家數組得到它的元素:

var myProp = t1.properties; 

var list = myProp[0].addresses; 

var atHome = myProp[0].home; 
for(var i = 0 ; i < atHome.length; i += 1) { 
var homeIndex = list.indexOf(atHome[i]); 
    alert(homeIndex); 
} 

https://jsfiddle.net/1L9e4bxr/