Parsing Array Strings
Array elements can hold a single data item, either a number or a string. Suppose, though, that you wish to create an array with multiple data items. For example, suppose you want to maintain a
contacts list as an array of names, phone numbers, and email addresses that can be used to look up individual information. Say that you have the following information you want to make available.
A. Azure, 555-1111, azure@email.com
B. Brown, 555-2222, bbrown@email.com
C. Brown, 555-3333, cbrown@email.com
D. Crimson, 555-4444, dcrimson@email.com
E. Gold, 555-5555, egold@email.com
F. Golden, 555-6666, fgolden@email.com
G. Green, 555-7777, ggreen@email.com
You can, of course store these strings of information in an array. However, you want
to be able to handle the data items making up these strings separately. You want to display
the information on separate lines or in different styles, or you want to format the email
addresses as links. You need a way, then, of separating the strings into individual data items
to report them as shown below.
Find:
Figure 6-7. A table look-up application with parsed fields.
Scripting of this application is similar to the table look-up for postal codes. A
contacts
array is created when the page loads. Elements are strings
with names, phone numbers, and email addresses. A find()
function
searches for matching names or partial names and displays the information. A major difference
is in how the retrieved strings are broken down, or parsed, into separate data elements
for individual display.
var contacts = new Array();
function loadArray()
{
contacts[0] = "A. Azure, 555-1111, azure@email.com";
contacts[1] = "B. Brown, 555-2222, bbrown@email.com";
contacts[2] = "C. Brown, 555-3333, cbrown@email.com";
contacts[3] = "D. Crimson, 555-4444, dcrimson@email.com";
contacts[4] = "E. Gold, 555-5555, egold@email.com";
contacts[5] = "F. Golden, 555-6666, fgolden@email.com";
contacts[6] = "G. Green, 555-7777, ggreen@email.com";
}
function Find()
{
document.getElementById("output").innerHTML = "";
var searchName = document.getElementById("findString").value.toLowerCase();
for (i=0; i < contacts.length; i++) {
var arrayName = contacts[i].toLowerCase();
if (arrayName.indexOf(searchName) != -1) {
var infoArray = contacts[i].split(",");
document.getElementById("output").innerHTML += "<br/>" +
"<b>" + infoArray[0] + "</b><br/>" +
infoArray[1] + "<br/>" +
"<a href='mailto:'" + infoArray[2] + "'>" + infoArray[2] + "</a><br/>";
}
}
}
function init()
{
loadArray();
find();
var findBtn = document.getElementById("findBtn");
findBtn.onfocus=find;
}
window.onload=init;
Find: <input id="findString" type="text" style="width:100px" value="gold"/>
<input type="button" value="Find" id="findBtn"/><br/>
<span id="output"></span>
Listing 6-7. Code to perform a table look-up with parsed fields.
The matching string of contact information appears in array element contacts[i]
.
An easy way to separate a string into its component data items is by applying the split()
method to the string and storing the
individual items in their own array.
var infoArray = contacts[i].split(",");
This method automatically creates an array of elements, one for each substring of a string.
The string is split into substrings by supplying a delimiter character, that is, a
character that can be used as the separator for the substrings. In this example, a comma
(","
) is used to split the contacts[i]
string
since it separates the name from the phone number from the email address. With the above statement,
array infoArray
contains three elements, each storing one of these three
substrings moving from left to right through the string.
InfoArray
E. Gold |
555-5555 |
egold@email.com |
Figure 6-8. A string split into an array.
(A delimiter character cannot be part of an actual data value. In this example,
a comma does not appear within a data value.)
The remaining statements in the function display the three elements of this array. infoArray[0]
contains the name, infoArray[1]
contains the phone number, and infoArray[2]
contains the email address, displayed one per line in the output area.
The email address is made into a link by surrounding it with an <a href="mailto:">
tag.
"<a href='mailto:" + infoArray[2] + "'>" + infoArray[2] + "</a>"
When concatenated with an email address from the array, the following example code is written to the page to produce a link that opens the user's default email program and writes the supplied email address into the "To:" line.
<a href='mailto:egold@email.com'>egold@email.com</a>
Rather than working with information in strings, the contact data can be split among several
corresponding arrays. There is no best solution. You are likely to employ different techniques
to answer the particular need at hand.