簡體   English   中英

Javascript:讀取對象數組

[英]Javascript: read Array of Objects

我有兩個.js文件。 在一個,我想用一個具有兩個屬性的對象填充數組。 在另一個文件中,我想循環遍歷數組並使用對象屬性。

我的編碼看起來像這樣:

file1.js

var selection = new Object();
selection.column = "";
selection.term = "";

var selectionContainer = new Array();
...
press: function(){
 var i;
 for (i=1;i<=selectionContainer.length;i++){
  selection = selectionContainer[i];
  alert("Search Term: " + selection.column + selection.term);
 }
}

file2.js

change: function(oEvent){
 selection.column = "someText";
 selection.term = "someOtherText";
 selectionContainer[nrOfEntries] = selection;
}

執行javascript時,我收到'未捕獲的TypeError:無法讀取屬性'列'未定義'。

我究竟做錯了什么?

在JS數組中,索引為0 ,最后一個元素為.length - 1 因此,您需要將循環更改為從0開始並使用<而不是<=

for (i=0;i<selectionContainer.length;i++){

您收到的錯誤, Uncaught TypeError: Cannot read property 'column' of undefined' ,是因為當您的計數器到達selectionContainer.length您試圖讀取一個剛好超過數組末尾的元素,這本身並不會給出一個錯誤,它只是返回undefined ,但然后undefined.column給出錯誤。

但是 - 雖然它有點難以分辨,因為我不確定你沒有顯示的代碼 - 在代碼中你確實顯示它看起來你正在用你對同一個對象的多個引用填充你的數組,因為在你的change函數更新現有selection對象的屬性,然后將對該對象的引用放入數組中。 我相信你需要在那時創建一個新對象:

change: function(oEvent){
  selection = new Object();
  selection.column = "someText";
  selection.term = "someOtherText";
  selectionContainer[nrOfEntries] = selection;
}

...但更簡單的方法是使用對象文字:

change: function(oEvent){
  selectionContainer[nrOfEntries] = { column : "someText", term : "someText" };
}

您沒有說nrOfEntries是什么,但是當JS為您提供.length屬性時,您不需要單獨的變量來跟蹤數組中元素的數量。 在任何情況下,如果您只是想添加到數組的末尾,您可以這樣做:

  selectionContainer.push( { column : "someText", term : "someText" } );

通常,最好使用數組文字和對象文字來創建空數組和對象,因此代碼的開頭可能是:

var selection = {};
...
var selectionContainer = [];

首先 - 為什么你從索引開始循環1.如果你從第一個元素開始是不正確的:

for (var i=0;i<selectionContainer.length;i++) {

其次,最好使用push方法向數組中添加元素。 例如:

selectionContainer.push(selection);
nrOfEntries = selectionContainer.length;

如果這沒有幫助,那么我們需要有關nrOfEntries及其更改方式的更多信息。

    change: function(oEvent){
    selection.column = "someText";
    selection.term = "someOtherText";
    selectionContainer[nrOfEntries] = selection;    
}

將其更改為

    change: function(oEvent) {
        selectionContainer.push({column : 'someText', term : 'someOtherText});
}

你不再需要我了,你不要忘記填寫selectionContainer [0]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM