Version 1.2.0 of jList brings performance improvements to the two most recently added functions listRemoveDuplicates and listRemoveDuplicatesNoCase. These now run about 30% faster than before though you are unlikely to notice the gains unless you are working with very large lists (100,000+ elements) or running it many times consecutively.
The new functions are:
As you might guess from the names these are intended to remove duplicate elements from lists.
A simple code snippet illustrates the difference between the two:
mylist = 'cat,dog,monkey,DOG,Dog,cat';
response = jList.listRemoveDuplicates(mylist);
response = jList.listRemoveDuplicatesNoCase(mylist);
In line 3 we perform case-sensitive matching when looking for duplicates. As a result, we don’t consider ‘dog’ to be the equivalent of ‘DOG’ or ‘Dog’ so the result displayed in line 4 will be ‘cat,dog,monkey,DOG,Dog’ – only the duplicate ‘cat’ has been removed.
In line 4 we perform case-insensitive matching when looking for duplicates. As a result, the output from line 7 will be ‘cat,dog,monkey’ as ‘dog’, ‘DOG’ and ‘dog’ are all considered equivalent in this case.
Notice also that in both functions the order of the list elements is unchanged. This illustrates that it’s the second and subsequent occurrences of an element that are considered to be the duplicates and removed, the first occurrence remains in its original place within the list.
The new version of jList, including updated documentation, is available for download from GitHub.
For instance, the string “carrots,peas,lettuce,tomato” could be described as a “comma delimited” or “comma separated” list. Although commas are the most common delimiter for lists, any character can be used – “Monkey:Rabbit:Mouse:Elephant” is no less a list than the comma delimited list.
There are 13 functions included in the library. They are, in alphabetical order:
Concatenates an element to a list.
Deletes an element from a list.
Determines the index of the first list element in which a specified value occurs. The search is case-sensitive.
Determines the index of the first list element in which a specified value occurs. The search is case-insensitive.
Gets the first element of a list.
Gets a list element at a specified position.
Inserts an element into a list.
Gets the last element of a list.
Determines the number of elements in a list.
Inserts an element at the beginning of a list.
Inserts a string at the beginning and end of list elements.
Gets a list, without its first element.
Reverses the order of elements in a list.
Replaces the contents of a list element.
Sorts list elements according to a sort type and sort order.
Once the library is loaded then invoking the function you want is simply a matter of prefixing the function with “jList.”. The following example, which uses the listAppend and listSort functions, shows how:
var l, l2;
l = "Susan,Janet,Steve,Bree,Michele,Jim,Mark,Elizabeth";
l = jList.listAppend(l, "David");
l2 = jList.listSort(l);
This will show an alert with the text “Bree,David,Elizabeth,Janet,Jim,Mark,Michele,Steve,Susan”.
List processing is convenient for handling many strings that don’t at first appear to be lists. For example, the URL “http://www.mysite.net/main.htm?id=1234”
; can be considered to be a list or, more usefully, a series of lists. To extract the top-level domain (tld) part (in this case the “net”) we could think of the URL as a “dot delimited” list, within a “forward-slash delimited” list.
var url = "http://www.mysite.net/main.htm?id=1234";
var url_part = jList.listGetAt(url,3,"/"); // returns 'www.mysite.net'
var tld = jList.listLast(url_part,"."); // returns 'net'
In line 2 we grab the 3rd item in the list, using a delimiter of “/”. In this case this is “www.mysite.net” because the first item is “http:” and the second item is empty. This is an important difference between this library and ColdFusion list processing – empty elements are not ignored in these functions. Notice also that we start counting the items from 1, not from zero.
Once we have the third item stored in url_part (line 2) we can then treat this as a “dot delimited” list. Using the listLast function (line 3) to retrieve the rightmost item in the list but this time specifying “.” as the delimiter will return “net” into the tld variable.
For this 1.0.0 release I have cleaned up the code, added detailed documentation and made it public on GitHub.