A collection of simple AS3 string helpers

This article was originally published at tech.blinemedical.com

We all know that it’s smart to create helper and utility classes when faced with a problem that can be encapsulated, but sometimes we forget that even the smallest of things can be put into a helper. Whenever you find yourself writing something more than once you should think about encapsulating that logic. Even small logical elements should be moved to a separate function. It helps with readability, maintainability, and a separation of logic. It also makes things easier to test. Here are a couple of ActionScript string utilities we use. We have tons of them and I’ll be posting snippets here and there of ones we find useful.

Check if a list is empty.

I use this one everywhere! It seems silly, but this may be the most used helper function in our entire application.

public static function isEmpty(list:IList):Boolean {
    return list == null || list.length == 0;
}

Flatten a list into a delimited string

It’s handy to be able to say given a list of objects, print out a comma (or delimiter) seperated string representing that list. This function takes a list, a function that formats each item, and an optional delimiter. An example usage is:

var foldedString:String = foldToDelimitedList(listOfUsers,
	function(item:Object):String{
		return (item as UserData).userName;
	});

Which would give you something like “user1, user2, user3”.

public static function foldToDelimitedList(vals:ArrayCollection, formatter:Function, delim:String = ", "):String{
	var retString:String = "";
	var count:int = 0;
	for each(var item:Object in vals){
		retString += formatter(item);

		count++;

		if(count < vals.length){
			retString += delim;
		}
	}
	return retString;
}

Find an item in a list

This one is handy when you want to know if something is in a list based on a certain property. If it finds the item it will return to you the index it found. You use it like this:

var index:int = findItem(list, "someProperty", "expectedPropertyValue");

For an element whose property someProperty matches the value expectedPropertyValue, it will return the first found index.

public static function findItem(dataProvider:Object, propName:String, value:Object, useLowerCase:Boolean = false):int {

	if (value == null) {
		return -1;
	}

	var max:int = dataProvider.length;
	if (useLowerCase) {
		value = value.toString().toLocaleLowerCase();
	}
	for(var i:int=0; i<max; i++) {
		var item:Object = dataProvider[i];

		if (item == null) {
			continue;
		}
		var loopValue:Object = item[propName];
		if (loopValue == null) {
			continue;
		}

		if (loopValue == value || (useLowerCase && loopValue.toString().toLocaleLowerCase() == value)) {
			return i;
		}
	}
	return -1;
}

Post a comment

You may use the following HTML:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>