Ask a Question

Creating Dictionary in JavaScript

theultimate
New Contributor

Creating Dictionary in JavaScript

Hello everyone,

 

I need your help with creating a dictionary in JavaScript with multiple keys, like this:

 

array = {
	"Load Case" :
	{
		"(Support)1" : {
			"Location(ft)" : 0,
			"Fy(kips)" : 0,
			"Mz(kft)" : 0,
			"Deflection(in)": 0,
			"Rotation(Deg)" : 0
		},
		
		"2" : {
			"Location(ft)" : 0,
			"Fy(kips)" : 0,
			"Mz(kft)" : 0,
			"Deflection(in)": 0,
			"Rotation(Deg)" : 0
		},
	},
	
	"Envelope" :
	{
	}
};

What i m trying to do is to get the values from a grid, and for each line set the name from row[0] as the main key, and as subkeys the name which are on column[0] and after that add values to the subkeys from table[i][j].

 

 

6 REPLIES 6
tristaanogre
Esteemed Contributor

Is there a particular reason why you can't use the dictionary object provided natively in Windows?

 

See

https://support.smartbear.com/testcomplete/docs/scripting/dictionary-object.html


Robert Martin
[Hall of Fame]
Please consider giving a Kudo if I write good stuff
----

Why automate?  I do automated testing because there's only so much a human being can do and remain healthy.  Sleep is a requirement.  So, while people sleep, automation that I create does what I've described above in order to make sure that nothing gets past the final defense of the testing group.
I love good food, good books, good friends, and good fun.

Mysterious Gremlin Master
Vegas Thrill Rider
Extensions available

I am not used with dictionaries in javascript.

 

I ve tried something like this:

function testt()
{
  var arrList = getActiveXObject("Scripting.Dictionary");
  
  for (let i = 1; i <= wndConspanAnalysisGrid.wRowCount; i++)
  {
    var arrListColumns = getActiveXObject("Scripting.Dictionary");

    //Principal keys
    for (let j = 1; j <= wndConspanAnalysisGrid.wColumnCount; j++)
    {
      arrListColumns.Add(GetCellText(0, j), GetCellText(i, j));
    }

    var arrayTest = (new VBArray(arrListColumns.Items())).toArray();
    Log.Message("Count " + arrayTest.length);
for (let k = 0 ; k < arrayTest.length; k++) Log.Message(arrayTest[i]);
arrList.Add(GetCellText(i, 0), arrListColumns); } return arrList; }

My new question is how can i print to log.message the whole dictionary to see if its working properly or a function to get the specific element from this dictionary?

I'm not sure you can....  There would have to be some way to convert the dictionary object into a string to write out to the log... and I'm not sure that you can natively do that.



Robert Martin
[Hall of Fame]
Please consider giving a Kudo if I write good stuff
----

Why automate?  I do automated testing because there's only so much a human being can do and remain healthy.  Sleep is a requirement.  So, while people sleep, automation that I create does what I've described above in order to make sure that nothing gets past the final defense of the testing group.
I love good food, good books, good friends, and good fun.

Mysterious Gremlin Master
Vegas Thrill Rider
Extensions available

It must be, then what's the point of this dictionary?

The point of any dictionary is to be able to have a means, by using a key, to return a value.  So... that's what we have.  Debugging and reporting on how the dictionary is constructed is simply a matter of development process.


Robert Martin
[Hall of Fame]
Please consider giving a Kudo if I write good stuff
----

Why automate?  I do automated testing because there's only so much a human being can do and remain healthy.  Sleep is a requirement.  So, while people sleep, automation that I create does what I've described above in order to make sure that nothing gets past the final defense of the testing group.
I love good food, good books, good friends, and good fun.

Mysterious Gremlin Master
Vegas Thrill Rider
Extensions available

Thanks a lot for your answers.

 

I solved my problem, i will post my code below, maybe will help someone.

 

var wndConspanAnalysisGrid = Aliases.LEAPBridgeConcrete.wndConspan.MDIClient.wndMain.pageMain.pageAnalysis.Custom1;

function TestCreateDictionary()
{
  var arrList = getActiveXObject("Scripting.Dictionary");
  
  for (let i = 1; i <= wndConspanAnalysisGrid.wRowCount; i++)
  {
    var arrListColumns = getActiveXObject("Scripting.Dictionary");

    //Sub keys
    for (let j = 1; j <= wndConspanAnalysisGrid.wColumnCount; j++)
    {
      arrListColumns.Add(GetCellText(0, j), GetCellText(i, j));
    }

    //Principal keys
    arrList.Add(GetCellText(i, 0), arrListColumns);
  }

  /*var safeArray = (arrList.Keys().toArray())
  for (let i in safeArray) {
    Log.Message("Key is: " + safeArray[i]);
    var lineD = arrList.Item(safeArray[i]);
    var line = lineD.Keys().toArray();
    for (let k in line)
      Log.Message("Key is: " + line[k] + ", value is: " + lineD.Item(line[k]))
  }*/
  
  var value = SearchValue(arrList, "2", "Location(m)");

  Log.Message(value);
  //return arrList;
}

function SearchValue(arrList, lineKey, columnKey)
{
  var line = arrList.Item(lineKey);
  
  return line.Item(columnKey);
}

function GetCellText(i, j)
{
  return wndConspanAnalysisGrid.GetItemText(i, j).m_pszData;
}
cancel
Showing results for 
Search instead for 
Did you mean: