2017-03-17 9 views
0

私はどこでも見てきました。誰かがこれを助けることができますか?基本的に、indexOfはストアド変数に-1を返します。私は何かシンプルなものを見逃してしまったが、見つけられないようだ。Stumped - 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/ 非常にシンプルですがVARSが交換されたときに動作しません。 varをスワップアウトすると、2(正しい)を返します。

homeIndex = list.indexOf(5802)
homeIndex = list.indexOf(atHome)は-1を返します。 (間違っている)

誰でもこれを説明できますか?

+1

'document.write(atHome);は' atHome'配列を文字列に変換します。あなたのコードで 'var homeIndex = list.indexOf(atHome [0]);'を実行する必要があります。 – Redu

+1

Thxしかし、インデックス番号を知っていれば、indexOf()関数は必要ありません。しかし、以下の答えが見つかりました。私はこれが簡単な修正だが非常に重要だと思う。あなたの助けにThx。 – user3112937

+0

'console.log'の代わりに' document.write'や 'alert'などのロギングを行う場合は、' JSON.stringify(...) 'の値を必ず*囲むべきです。 – Bergi

答えて

0

実際myProp[0].home返す文字列とすべての要素が整数であり、あなたはそれからint型に変換チェックする必要があり、あなたの配列では、ここで変更

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

デモ:https://jsfiddle.net/qmn7h7pb/1/

+1

ありがとうございました!私はそれが簡単だと知っていますが、私はそのニュアンスを決して考えなかったでしょう。 U男。もし私ができるなら、私はあなたを親指でつかむだろう – 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/

関連する問題