2012-04-22 33 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