Might be some of you already know about Dictionaries in JavaScript. But recently I, worked on JavaScript dictionary. And that was really interesting and helpful for me. So I wanted to share my findings to you all. Please share your feedback for my posting.
JavaScript provides us a way to make a Dictionary object and use it as a C# dictionary. Although we would not be having all the properties that is supported by C# dictionary, but we will be able to use it as a normal dictionary i.e. in key value format.
Let’s see one simple example:
I have stored list of all week days as keys and assigned some numbers to these as values. Let’s see the code.
function CreateDayDictionary() { var days = new Array(); days['Sunday'] = 1; days['Monday'] = 2; days['Tuesday'] = 3; days['Wednesday'] = 4; days['Thursday'] = 5; days['Friday'] = 6; days['Saterday'] = 7; }
Now to fetch the values at any point of time, we can fetch as per the code given below. Here I have made a function to alert some data. It can be as
function ShowDays() { alert(days['Sunday']); alert(days['Thursday']); alert(days['Saterday']); }
It will show three alerts, first 1 then 5 and lastly 7.
So we can store some global data in our page. And this data we can access, at different events, we require.
Similarly we can store objects in the dictionary in same way. Let’s see the code
function CreateDictionarywithObject() { var objDictionary = new Array(); // Creating a dictionary which is holding five objects for (var i = 0; i < 5; i++) { var obj= new myClass(); obj.member1 = 'member1data' + i; obj.member2 = 'member2data' + i; obj.member3 = 'member3data' + i; objDictionary['Obj' + i] = obj; } //Fetching third Object var fetchedObj = objDictionary['Obj3']; alert(fetchedObj.member1); alert(fetchedObj.member2); alert(fetchedObj.member3); }
Now, one more thing if you want to pass the data from server to client as a JSON data, you can serialize a C# dictionary at server side, and again when you will desterilize at client side you will be getting the dictionary as we discussed above. Let’s see the magic.
Here I have made one class Employee as
public class Employee { public int Id { get; set; } public string Name { get; set; } public decimal Salary { get; set; } public int Age { get; set; } }
Now, on the page load, I created a dictionary with some data, like below
List<Employee> employees= new List<Employee>() { new Employee{ Id=1000, Name="Brij", Age=27, Salary=800000}, new Employee {Id=1001, Name = "Rahul", Age=28,Salary=500000}, new Employee {Id=1002, Name = "Anoop", Age= 29 ,Salary = 60000} }; Dictionary<string, Employee> employeeData = employees.ToDictionary(em => em.Id.ToString(), emp => emp);
Now serialize the data using JavaScriptSerializer and assigned it in a hidden variable
JavaScriptSerializer ser = new JavaScriptSerializer(); hfData.Value = ser.Serialize(employeeData);
Now I have a textbox and a button to show employee details. My aspx code looks like this
<body> <form id="form1" runat="server"> <div> <span>Id: </span> <input id="idName" type="text" /><br /> <input id="Button2" type="button" value="Displaydetail" onclick="show();"/> <asp:HiddenField ID="hfData" runat="server" /> </div> </form> </body>
Here I will be entering the Id of the employee, and on clicking the button “Show details”, I am displaying the data as JavaScript alerts. So let’s see the JavaScript code
function parseEmployeeData() { //for parsing the data employees = JSON.parse(document.getElementById("<%= hfData.ClientID%>").value); } function show() { parseEmployeeData(); var key = document.getElementById('idName').value; var emp = employees[key]; if (typeof (emp) != 'undefined') { // If key is found then dispaly the details alert(emp.Name); alert(emp.Age); alert(emp.Salary); } else { // key not found alert('No data found'); } }
As you can see, first I am parsing the data using JSON, and then finding the value in the dictionary using some key and displaying the details as a JavaScript alert.
This sample is just for an example, to show how we can use JavaScript dictionary in our daily life.
Here, I have used namespace System.Web.Script.Serialization for serializing the data at C#. Also, I have included JSON JavaScript file in my application to parse the data at Client Side.
Happy Client Scripting
Thanks,
Brij