2012-04-22 1 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';' Или массив просто пуст, вполне возможен, если исходный код не бомбил. –

+0

objAdapt.cName имеет внутри 18 записей, но я не знаю, как перечислять динамические массивы в моем случае ... Я не в JScripting, я просто немного знаю об этом ... так что вы можете помочь мне whit my little script ... для перечисления данных динамического массива из ** objAdapt.cName **? – beic

+0

Можете ли вы представить структуру того, как выглядит cName? Это действительно просто строка? – Rake36

ответ

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

Per Hans комментарий,

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

должно быть:

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

как 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

+0

Это неправильно. 'lgCount' будет индексом массива (или именем свойства, если в массив добавлены дополнительные свойства). См. Страницу MSDN для ['for..in'] (http://msdn.microsoft.com/en-us/library/55wb2d34%28VS.84%29.aspx), в частности« Перед каждой итерацией цикла, _variable_ присваивается следующее имя свойства _object_ или следующий индекс элемента _array_. " –

+0

Мой плохой Черан. Добавлен пример. – Rake36

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_, это устранило проблему. –

+0

@CheranShunmugavel Что я выяснил ... Объект Array в JScript не совпадает с массивом VBScript. В JScript тип данных называется «VBArray» (также называемый «safairray»). Вероятно, самый простой способ итерации объекта VBArray - вернуть копию объекта JScript Array объекта VBArray с помощью конструктора объекта Array или метода toArray() объекта Array. – beic

Смежные вопросы