2012-04-22 11 views
0

転載動作するコードはJScriptの配列の問題

は(私は私のActiveXコンポーネントから配列を取得しようとしているが、私はスクリプトを実行すると運で。私は、空のメッセージボックスを取得するが、私は、Arrayのことを知っています

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

はただ無効です。確かに、あなたは 'stMsg = stMsg + lgCount + '\ r \ n';を意味しました;あるいは、配列はただ空です。 –

+0

objAdapt.cNameには18個のエントリーがありますが、私の場合は動的配列を列挙する方法がわかりません... JScriptingではなく、ちょっと分かります...私の小さなスクリプト... 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'; 
} 

また、この例では、私のために正常に動作します! vrAdapt [lgCount]使用

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'; 
} 

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'は配列インデックス(または配列に特別なプロパティが追加されている場合はプロパティ名)になります。 ['for..in'](http://msdn.microsoft.com/en-us/library/55wb2d34%28VS.84%29.aspx)のMSDNページを参照してください。具体的には、「ループの各繰り返しの前に、 _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私が考え出したのは... JScriptのArrayオブジェクトは、VBScript配列と同じではありません。 JScriptでは、データ型は「VBArray」(「セーフアレイ」とも呼ばれます)と呼ばれます。おそらく、VBArrayオブジェクトを反復する最も簡単な方法は、ArrayオブジェクトのコンストラクタまたはArrayオブジェクトのtoArray()メソッドを使用して、VBArrayオブジェクトのJScript Arrayコピーを返すことです。 – beic