2012-04-22 43 views
0

轉貼工作代碼JScript數組問題

(我想從我的ActiveX組件獲得陣列,但沒有運氣。當我運行該腳本,我得到空的消息框,但我知道,數組在那裏:)

var objMain, objAdapt, lgCount, stMsg = ""; 

objMain = new ActiveXObject("nnetcom.oMain"); 

objMain.UnlockComponent("xxx-xxxxx-xxxxx-xx"); 

objAdapt = new ActiveXObject("nnetcom.oNetworkAdapter"); 

objAdapt.GetNetworkAdapters(); // Collects Network Adapters 

vrAdapters = objAdapt.cName; // cName holds collected Network Adapter names 

var vrAdaptVB = new VBArray(vrAdapters); 

var vrAdaptJS = vrAdaptVB.toArray(); 

for (lgCount in vrAdaptJS) { 
    stMsg = stMsg + vrAdaptJS[lgCount] + '\r\n'; 
} 

WScript.Echo(stMsg); 

objAdapt = null 
objMain = null 
+0

使用vrAdapt [lgCount]就是無效的。當然,你的意思是'stMsg = stMsg + lgCount +'\ r \ n';'或者數組只是空的,如果原始代碼沒有彈出,就很有可能。 – 2012-04-22 15:52:07

+0

objAdapt.cName裏面有18個條目,但我不知道如何枚舉動態數組......我不在JScripting中,我只是知道一點點...所以,你能幫我一把請問我的小腳本...枚舉來自** objAdapt.cName **的動態數組數據? – beic 2012-04-22 16:01:53

+0

你能提供cName的結構嗎?它真的只是一個字符串? – Rake36 2012-04-24 00:19:51

回答

0

或者簡單的方法是:

var vrAdaptVB = new VBArray(vrAdapters); 

var vrAdaptJS = vrAdaptVB.toArray(); 

stMsg = ""; 

for (lgCount in vrAdaptJS) { 
stMsg = stMsg + vrAdaptJS[lgCount] + '\r\n'; 
} 

這個例子也工作正常,我!

List Network Adapters working example

0

每漢斯評論,

for (lgCount in vrAdapt) 
{ 
    stMsg = stMsg + vrAdapt[lgCount] + '\r\n'; 
} 

應該是:

for (lgCount in vrAdapt) 
{ 
    stMsg = stMsg + lgCount + '\r\n'; 
} 

as lgCount是元素,而不是索引。

我的錯誤。這個例子的工作原理:從我第一次公佈的答案

var list = {a:1,b:2,c:3,d:4,e:5}; 
var msg = ""; 
for (i in list) { 
    msg = msg + list[i]; 
} 
//msg = 12345 

msg = ""; 
for (i in list) { 
    msg = msg + i; 
} 
//msg = abcde 

var list = [1,2,3,4,5]; 
msg = ""; 
for (i in list) { 
    msg = msg + i; 
} 
//msg =

msg = ""; 
for (i in list) { 
    msg = msg + list[i]; 
} 
//msg = 12345 
+0

也許你是對的,我改變了上面的代碼,但它並沒有返回任何東西,我在VBScript中獲得了相同的源代碼,並且它的工作非常棒!你能告訴我代碼中現在有什麼問題嗎? – beic 2012-04-22 19:01:31

+0

這是錯誤的。 'lgCount'將是一個數組索引(或者是一個屬性名稱,如果該數組添加了額外的屬性)。請參閱['for..in'](http://msdn.microsoft.com/en-us/library/55wb2d34%28VS.84%29.aspx)的MSDN頁面,具體爲「在每次循環迭代之前, _variable_分配了_object_的下一個屬性名稱或_array_的下一個元素索引。「 – 2012-04-24 07:40:23

+0

我的壞Cheran。附上一個例子。 – Rake36 2012-04-25 01:19:35

2
var vrAdaptVB = new VBArray(vrAdapters); 

var vrAdaptJS = vrAdaptVB.toArray(); 

stMsg = ""; 

for (lgCount = 0; lgCount < vrAdaptJS.length; ++lgCount) { 
stMsg = stMsg + vrAdaptJS[lgCount] + '\r\n'; 
} 
+0

如果您可以添加_why_的解釋來解決問題,它將有助於未來的訪問者。 – 2012-04-24 07:32:05

+0

@CheranShunmugavel我想通了...... JScript中的Array對象與VBScript數組不同。在JScript中,數據類型被稱爲「VBArray」(也稱爲「safearray」)。迭代VBArray對象的最簡單方法可能是使用Array對象的構造函數或Array對象的toArray()方法返回VBArray對象的JScript Array副本。 – beic 2012-04-24 07:58:51