cancel
Showing results for 
Search instead for 
Did you mean: 

Loop/iterate over dictionary

SOLVED
newbiexiii
New Contributor

Loop/iterate over dictionary

I created a dictionary as follows and would like to loop over it and perform some actions.

 

var dict = new ActiveXObject("Scripting.Dictionary");

dict.add("a",1);

dict.add("b",2);

dict.add("c",3);

for (var key in dict){

 Log.message("key is "+key+" and value is "+dict[key])

}

 

But the program does not enter the loop.

How can i iterate over the dictionary in Testcomplete using Jscript?

1 ACCEPTED SOLUTION

Accepted Solutions
KseniaSemina
Staff

Re: Loop/iterate over dictionary

Hi,

I am not familiar with Dictionary, but I found one example:
//JScript
function ItemsDemo()
{
var a, d, i, s; // Create some variables.
d = new ActiveXObject("Scripting.Dictionary");
d.Add ("a", "Athens"); // Add some keys and items.
d.Add ("b", "Belgrade");
d.Add ("c", "Cairo");
a = (new VBArray(d.Items())).toArray(); // Get the items.
s = "";
for (i in a) // Iterate the dictionary.
{
s += a[i] + "<br>";
}
return(s); // Return the results.
}

It appears that in your code the part to create an array with the needed items is missing.
I've tried to modify your code and here is what I've got:
function DictTest() {
var dict, ar, typeIs, i
dict = new ActiveXObject("Scripting.Dictionary");
dict.add("a", 1);
dict.add("b","2");
dict.add("c","3");

ar = (new VBArray(dict.Items())).toArray()

for(i in ar) {
Log.Message("inside for loop");
Log.Message("the keys are "+ar[i]);
var typeIs = typeof ar[i];
Log.Message("the type of keys is "+ typeIs)
}
}
It looks pretty fine on playback and you can find the results in the screenshot below:

KseniaSemina_0-1617195421418.png


Does it help?

Thanks

View solution in original post

3 REPLIES 3
AlexKaras
Community Hero

Re: Loop/iterate over dictionary

Hi,

 

Try

for (var key in dict.keys)

 

Does it help?

 

Regards,
  /Alex [Community Hero]
____
[Community Heroes] are not employed by SmartBear Software but
are just volunteers who have some experience with the tools by SmartBear Software
and a desire to help others. Posts made by [Community Heroes]
may differ from the official policies of SmartBear Software and should be treated
as the own private opinion of their authors and under no circumstances as an
official answer from SmartBear Software.
The [Community Hero] signature is used with permission by SmartBear Software.
https://community.smartbear.com/t5/custom/page/page-id/hall-of-fame
================================
newbiexiii
New Contributor

Re: Loop/iterate over dictionary

It enters the loop but when it try to access the values it shows up as undefined

var dict = new ActiveXObject("Scripting.Dictionary");
dict.add("a",1);
dict.add("b","2");
dict.add("c","3");

var keys = dict.Keys();
Log.Message("the keys are "+keys[0]); -----> prints undefined
var typeIs = typeof keys;
Log.Message("the type of keys is "+typeIs) -----------> prints undefined

for(var i=0; i<dict.Count; i++){
Log.Message("inside for loop");
Log.Message("key is "+keys[i]+" and value is "+sessionsData[keys[i]]); ---------> prints key is undefined and value is undefined
}

KseniaSemina
Staff

Re: Loop/iterate over dictionary

Hi,

I am not familiar with Dictionary, but I found one example:
//JScript
function ItemsDemo()
{
var a, d, i, s; // Create some variables.
d = new ActiveXObject("Scripting.Dictionary");
d.Add ("a", "Athens"); // Add some keys and items.
d.Add ("b", "Belgrade");
d.Add ("c", "Cairo");
a = (new VBArray(d.Items())).toArray(); // Get the items.
s = "";
for (i in a) // Iterate the dictionary.
{
s += a[i] + "<br>";
}
return(s); // Return the results.
}

It appears that in your code the part to create an array with the needed items is missing.
I've tried to modify your code and here is what I've got:
function DictTest() {
var dict, ar, typeIs, i
dict = new ActiveXObject("Scripting.Dictionary");
dict.add("a", 1);
dict.add("b","2");
dict.add("c","3");

ar = (new VBArray(dict.Items())).toArray()

for(i in ar) {
Log.Message("inside for loop");
Log.Message("the keys are "+ar[i]);
var typeIs = typeof ar[i];
Log.Message("the type of keys is "+ typeIs)
}
}
It looks pretty fine on playback and you can find the results in the screenshot below:

KseniaSemina_0-1617195421418.png


Does it help?

Thanks

View solution in original post

New Here?
Join us and watch the welcome video:
Announcements
Top Kudoed Authors