2013-12-12 60 views
-1

我的函數獲取的數組元素變量參數爲null/undefined? 或者全部是關於分割功能? 感謝您的幫助!Javascript - 通過函數獲取數組元素參數未定義/ null

錯誤:

SCRIPT5007:無法獲取屬性未定義或空引用 '分裂'

JavaScript代碼:

newData = "1,1,1,1,1/2,2,2,2,2|3,3,3,3,3/4,4,4,4,4"; 

var arrPage = newData.split('|'); 

arrRow = arrPage[0].split('/'); 
rowCount = arrPage[0].split('/').length;  

for(var i = 0; i <= rowCount; i++){ 

var rData = arrPage[0].split("/"); 
a = rData[i]; 
renderTable(a); 
} 

function renderTable(rData) { 

var cData = rData.split(','); 

var c1 = cData[0]; 
var c2 = cData[1]; 
var c3 = cData[2]; 
var c4 = cData[3]; 
var c5 = cData[4]; 
var c6 = cData[5]; 
var c7 = cData[6]; 
var c8 = cData[7]; 
var c9 = cData[8]; 
var c10 = cData[9]; 
var c11 = cData[10]; 
var c12 = cData[11]; 
var rowData = ""; 

rowData = "<tr>"; 
rowData += "<td>"+ c1 +"</td>"; 
rowData += "<td>"+ c2 +"</td>"; 
rowData += "<td>"+ c3 +"</td>"; 
rowData += "<td>"+ c4 +"</td>"; 
rowData += "<td>"+ c5 +"</td>"; 
rowData += "<td>"+ c6 +"</td>"; 
rowData += "<td>"+ c7 +"</td>"; 
rowData += "<td>"+ c8 +"</td>"; 
rowData += "<td>"+ c9 +"</td>"; 
rowData += "<td>"+ c10 +"</td>"; 
rowData += "<td>"+ c11 +"</td>"; 
rowData += "<td>"+ c12 +"</td>"; 
rowData += "</tr>"; 


$("#acquisitionStatusList tbody").append(rowData); 
} 
+2

沒有什麼的'arrPage [0]'明顯。 – Loktar

+0

這個問題的根源是你不向我​​們顯示的'arrPage'的內容。 – jfriend00

+0

@Loktar其實它arrPage [0]在我的代碼上有一個值。但對於問題的參考。我添加了一個變量。謝謝! – codefish06

回答

0

作爲錯誤信息claerly說arrpage[0]是空的。你可以做的是在你的代碼中使用它之前檢查數組。

if (typeof array[index] !== 'undefined' && array[index] !== null) { 
var rData = arrPage[0].split("/"); 
} 
else 
{ 
alert("empty"); 
} 
+0

對不起,我已更改源代碼。在之前的代碼中,arrPage [0]已經有來自我的項目的數據。我想要關注的是renderTable()函數。感謝您檢查我的問題:) – codefish06

+0

歡迎:) –

0

我猜這:

arrRow = "1,1,1,1,1/2,2,2,2,2"; 

arrRow = arrPage[0].split('/'); 
rowCount = arrPage[0].split('/').length; 

應該看起來更像是這樣的:

arrPage = "1,1,1,1,1/2,2,2,2,2"; 

arrRow = arrPage.split('/'); 
rowCount = arrPage.split('/').length; 

在哪裏,然後arrRow是:

["1,1,1,1,1", "2,2,2,2,2"] 

和rowCount會2.

但是正如它所寫的那樣,對於你正在努力完成的事情來說,這沒什麼意義。還是讓我知道這是否讓你更接近,但...

編輯

var newData = "1,1,1,1,1/2,2,2,2,2|3,3,3,3,3/4,4,4,4,4"; 
var newPage = newData.split("|"); 
//work with "first" page... maybe 
newPage.forEach(function(newRow) { ... }); 
//or 
var newRow = newPage[0].split("/") 
//then if you think about it, it is newRow that you are feeding to your renderTable function 
newPage.forEach(function(newRow) { renderTable(newRow); }); 
+0

嗨!感謝您的回答。對不起,因爲我沒有把完整的代碼作爲參考。現在我添加了變量來支持這個問題。謝謝! – codefish06

+0

是的,@ jfriend00也已經找到它了,但是它的for循環需要將<=改爲< –

+0

我已經改變了for循環問題,但仍然出現錯誤。將數組元素作爲參數放在函數上有什麼問題嗎? – codefish06

0

這條線:

for(var i = 0; i <= rowCount; i++){ 

需求是:

for(var i = 0; i < rowCount; i++){ 

你要關底的陣列。

另外,renderTable()裏面的cData只有5個元素,但是你試圖訪問12個元素。


很多其他的問題,你的代碼太:

  1. 你重新計算arrPage.split('/')四倍。做一次並存儲結果。
  2. var聲明所有變量爲本地或全局變量。
  3. 正確縮進你的代碼,因此它更具可讀性。
  4. 有一個在定義所有這些變量c1c2等毫無意義的...
+0

謝謝您回答和觀察我的代碼@ jfriend00 我已更新參考代碼以清楚地瞭解問題。我想要關注的重點是renderTable()函數,它將數組元素作爲參數提取。 c1,c2,c3 ..是故意完成的。獲得一些數據後,他們每個人都有基於他們的價值觀的條件。 – codefish06

+0

@ codefish06 - 你明白爲什麼你需要改變'for'循環來使用'<'而不是'<='?正如你現在所知道的那樣,它將錯誤的數據提供給'renderTable()'函數,因此你會在'renderTable()'中出現錯誤。 – jfriend00

+0

感謝for循環的想法。我真的明白你在說什麼。但是,然後,我改變我的源代碼使用'<',仍然發生錯誤。將數組元素作爲參數放在函數上有什麼問題嗎? – codefish06