<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Barryvan &#187; web</title>
	<atom:link href="http://www.barryvan.com.au/tag/web/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.barryvan.com.au</link>
	<description>Music, Programming, Design</description>
	<lastBuildDate>Sun, 08 Jan 2012 08:48:12 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Quicksort an array of objects</title>
		<link>http://www.barryvan.com.au/2009/08/quicksort-an-array-of-objects/</link>
		<comments>http://www.barryvan.com.au/2009/08/quicksort-an-array-of-objects/#comments</comments>
		<pubDate>Wed, 05 Aug 2009 07:14:51 +0000</pubDate>
		<dc:creator>Barry van Oudtshoorn</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[MooTools]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Web design]]></category>
		<category><![CDATA[algorithms]]></category>
		<category><![CDATA[sort]]></category>
		<category><![CDATA[tips]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://www.barryvan.com.au/?p=225</guid>
		<description><![CDATA[Often, you will need to sort an array of objects in Javascript. The inbuilt sort() function can&#8217;t do this, but here is a Quicksort implementation for doing just this. Parameters array The array to be sorted. (See below for an implementation on the Array Native itself, which makes this variable unnecessary). key The key to [...]]]></description>
			<content:encoded><![CDATA[<p>Often, you will need to sort an array of objects in Javascript. The inbuilt <em>sort()</em> function can&#8217;t do this, but here is a Quicksort implementation for doing just this.</p>
<h2>Parameters</h2>
<p><strong>array</strong> The array to be sorted. (See below for an implementation on the Array Native itself, which makes this variable unnecessary).</p>
<p><strong>key</strong> The key to sort by. Make sure every object in your array has this key.</p>
<h2>Examples</h2>
<pre class="brush: javascript">
var objs = [
	{fruit:&quot;cherry&quot;},
	{fruit:&quot;apple&quot;},
	{fruit:&quot;banana&quot;}
];

console.log(objs.sortObjects(&#039;fruit&#039;));
// Logs [{fruit:&quot;apple&quot;},{fruit:&quot;banana&quot;},{fruit:&quot;cherry&quot;}] to the console
</pre>
<h2>The code</h2>
<pre class="brush: javascript">
sortObjects: function(array, key) {
	for (var i = 0; i &lt; array.length; i++) {
		var currVal = array[i][key];
		var currElem = array[i];
		var j = i - 1;
		while ((j &gt;= 0) &amp;&amp; (array[j][key] &gt; currVal)) {
			array[j + 1] = array[j];
			j--;
		}
		array[j + 1] = currElem;
	}
}
</pre>
<h3>Implemented on the Array native:</h3>
<pre class="brush: javascript">
Array.implement({
	sortObjects: function(key) {
		for (var i = 0; i &lt; this.length; i++) {
			var currVal = this[i][key];
			var currElem = this[i];
			var j = i - 1;
			while ((j &gt;= 0) &amp;&amp; (this[j][key] &gt; currVal)) {
				this[j + 1] = this[j];
				j--;
			}
			this[j + 1] = currElem;
		}
	}
});
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.barryvan.com.au/2009/08/quicksort-an-array-of-objects/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Javascript string ellipsising</title>
		<link>http://www.barryvan.com.au/2009/08/javascript-string-ellipsising/</link>
		<comments>http://www.barryvan.com.au/2009/08/javascript-string-ellipsising/#comments</comments>
		<pubDate>Wed, 05 Aug 2009 07:03:17 +0000</pubDate>
		<dc:creator>Barry van Oudtshoorn</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[MooTools]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Web design]]></category>
		<category><![CDATA[string manipulation]]></category>
		<category><![CDATA[tips]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://www.barryvan.com.au/?p=217</guid>
		<description><![CDATA[Putting ellipses into strings that are too long has been around for a very long time. Unfortunately, Javascript doesn&#8217;t offer a native method of doing this, so below is a little function that&#8217;ll do it for you. This function returns a copy of the string it&#8217;s called on, ellipsised, and takes three parameters: toLength (required) [...]]]></description>
			<content:encoded><![CDATA[<p>Putting ellipses into strings that are too long has been around for a very long time. Unfortunately, Javascript doesn&#8217;t offer a native method of doing this, so below is a little function that&#8217;ll do it for you.</p>
<p>This function returns a copy of the string it&#8217;s called on, ellipsised, and takes three parameters:</p>
<p><strong>toLength</strong> (required) The number of characters to truncate the string to (or 0 to disable ellipsising)</p>
<p><strong>where</strong> (optional, default &#8216;end&#8217;) A string representing where the ellipsis should be placed &#8212; &#8216;front&#8217;, &#8216;middle&#8217;, or &#8216;end&#8217;</p>
<p><strong>ellipsis</strong> (option, default &#8216;\u2026&#8242;) A string to be used as the ellipsis.</p>
<h2>Examples</h2>
<pre class="brush: javascript">
// Our clichéd string
var s = &#039;Jackdaws love my great big sphinx of quartz&#039;;

alert(s.ellipsise(10));
// Alerts &quot;Jackdaws l…&quot;

alert(s.ellipsise(10, &#039;front&#039;));
// Alerts &quot;… of quartz&quot;

alert(s.ellipsise(10, &#039;middle&#039;, &#039;pony&#039;));
// Alerts &quot;Jackdponyuartz&quot;</pre>
<h2>The code</h2>
<pre class="brush: javascript">String.implement({
	ellipsise: function(toLength, where, ellipsis) { // Where is one of [&#039;front&#039;,&#039;middle&#039;,&#039;end&#039;] -- default is &#039;end&#039;
		if (toLength &lt; 1) return this;
		ellipsis = ellipsis || &#039;\u2026&#039;;
		if (this.length &lt; toLength) return this;
		switch (where) {
			case &#039;front&#039;:
				return ellipsis + this.substr(this.length - toLength);
				break;
			case &#039;middle&#039;:
				return this.substr(0, toLength / 2) + ellipsis + this.substr(this.length - toLength / 2)
				break;
			case &#039;end&#039;:
			default:
				return this.substr(0, toLength) + ellipsis;
				break;
		}
	}
});</pre>
<p>If you&#8217;re not using MooTools, you can use this variant instead:</p>
<pre class="brush: javascript">String.prototype.ellipsise = function(toLength, where, ellipsis) { // Where is one of [&#039;front&#039;,&#039;middle&#039;,&#039;end&#039;] -- default is &#039;end&#039;
	if (toLength &lt; 1) return this;
	ellipsis = ellipsis || &#039;\u2026&#039;;
	if (this.length &lt; toLength) return this;
	switch (where) {
		case &#039;front&#039;:
			return ellipsis + this.substr(this.length - toLength);
			break;
		case &#039;middle&#039;:
			return this.substr(0, toLength / 2) + ellipsis + this.substr(this.length - toLength / 2)
			break;
		case &#039;end&#039;:
		default:
			return this.substr(0, toLength) + ellipsis;
			break;
	}
}</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.barryvan.com.au/2009/08/javascript-string-ellipsising/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Avoid Javascript&#8217;s &#8216;with&#8217; keyword</title>
		<link>http://www.barryvan.com.au/2009/05/avoid-javascripts-with-keyword/</link>
		<comments>http://www.barryvan.com.au/2009/05/avoid-javascripts-with-keyword/#comments</comments>
		<pubDate>Tue, 12 May 2009 00:06:10 +0000</pubDate>
		<dc:creator>Barry van Oudtshoorn</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[best practices]]></category>
		<category><![CDATA[syntax]]></category>
		<category><![CDATA[tips]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://www.barryvan.com.au/?p=162</guid>
		<description><![CDATA[Javascript is a fantastic language &#8212; in fact, it&#8217;s become the language that I do most of my programming in nowadays. It&#8217;s flexible, fast, and powerful. Unfortunately, though, it suffers from a few flaws, which, although not critical, can be frustrating. One of the potentially most confusing features is the with keyword, which promises a [...]]]></description>
			<content:encoded><![CDATA[<p>Javascript is a fantastic language &#8212; in fact, it&#8217;s become the language that I do most of my programming in nowadays. It&#8217;s flexible, fast, and powerful. Unfortunately, though, it suffers from a few flaws, which, although not critical, can be frustrating. One of the potentially most confusing features is the <em>with</em> keyword, which promises a lot, but can really just make life difficult.</p>
<p>The <em>with</em> keyword might appear to be harmless enough: it allows you to avoid typing long references; instead of</p>
<pre class="brush: javascript">ah.woom.ba.weh.lyric = &#039;In the jungle&#039;;</pre>
<p>we can type</p>
<pre class="brush: javascript">with (ah.woom.ba.weh) {
  lyric = &#039;In the jungle&#039;;
}</pre>
<p>But what happens if we happen to have a global variable named <em>lyric</em>? In the example below, which <em>lyric</em> should be modified?</p>
<pre class="brush: javascript">lyric = &#039;In the jungle&#039;;
with (ah.woom.ba.weh) {
  lyric = &#039;The mighty jungle&#039;;
}</pre>
<p>The simplest way to deal with this issue is to use a variable:</p>
<pre class="brush: javascript">var a = ah.woom.ba.weh;
a.lyric = &#039;The mighty jungle&#039;;</pre>
<p>Now there is no ambiguity.</p>
<p><em>Based on a <a href="http://yuiblog.com/blog/2006/04/11/with-statement-considered-harmful/">post by Douglas Crockford</a> at the YUI Blog.</em></p>
]]></content:encoded>
			<wfw:commentRss>http://www.barryvan.com.au/2009/05/avoid-javascripts-with-keyword/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
	</channel>
</rss>

