2011-12-30 22 views
0

的陣列我的數據結構會像下面從對象所需要過濾的對象從

var data = {"Questions" : [ 
        {"QID":"Q1","S":"2"}, 
        {"QID":"Q2","T":"12"}, 
        {"QID":"Q3","U":"22"}], // Also please suggest me to improve this to make parsing easier 
      "Share" : "Yes" 
      }; 
for(var item in data.Questions) 
{ 
    if(this.QID == "Q2") // this.QID returns me undefined 
    { 
     // I want to retrieve the total object i.e 
     // {"QID":"Q2","T":"12"} should be returned 
    } 
} 

爲什麼this.QID返回我undefined?我如何檢索整個對象,即{"QID":"Q2","T":"12"}

+1

那麼......問題是什麼? – Ryan 2011-12-30 06:07:20

+1

@minitech請閱讀問題..我已經指出了我正在接受什麼問題的意見......我不認爲我已經寫過上面的非英文字符:-) – Exception 2011-12-30 06:10:19

+0

我的觀點是:「什麼問題?你還沒有指定任何東西。你的問題沒有意義,你需要詳細說明。例如,「this.QID」來自哪裏? – Ryan 2011-12-30 06:11:32

回答

1

Don't iterate Arrays using for .. in loops。使用常規的for循環或Array.forEach() *。

那邊,this不是將成爲您的陣列中的項目。您需要:

if (data.Questions[item].QID == "Q2") { 
    ... 
} 

使用正for循環:

for (var i = 0; i < data.Questions.length; i++) { 
    if (data.Questions[i].QID == "Q2") { 
     ... 
    }  
} 

或者說,我的首選方法,Array.forEach()

data.Questions.forEach(function (item) { 
    if (item.QID == "Q2") { 
     ... 
    } 
}); 

*舊的瀏覽器並不支持Array.forEach(),但你可以添加它在你自己。請參閱compatibility notes,以獲取可用於舊版瀏覽器的代碼的實現。

+0

非常感謝您的大力支持。這就是爲什麼我喜歡stackoverflow.com :-) – Exception 2011-12-30 06:17:01

+0

我要使用forEach,因爲我的瀏覽器支持這種方法。再次感謝 – Exception 2011-12-30 06:19:02

1

更改您的迭代的代碼如下:

var questions = data.Questions; 
for (var i = 0; i < questions.length; i++) { 
    if (questions[i].QID == "Q2") { 
     // questions[i] is all the data of this array element 
    } 
} 

陣列不應與for (x in array)迭代。該類型的迭代遍歷對象屬性,該對象屬性也將拾取數組元素,但不建議。在現代瀏覽器中使用數組索引或.forEach()以可預測的順序迭代數組,並且不會在迭代中顯示任何其他屬性。

此外,您嘗試執行迭代的方式不會將this設置爲任何內容,因此您無法使用它來訪問數組元素。

+0

非常感謝您的迴應。 – Exception 2011-12-30 06:17:52