spacer
Yehuda Shiran March 29, 2000
Programming a FIFO Queue
Tips: March 2000

Yehuda Shiran, Ph.D.
Doc JavaScript

Developer News
Sir Tim Talks Up Linked Open Data Movement
From L.A. to Vegas With 100GbE
Salesforce Rolls Out Big Summer '08 Update
The shift() and unshift() methods are similar to the push() and pop() methods. The difference is that while the push() and pop() methods add and remove elements from the end of the array, the shift() and unshift() methods roll out and in elements from the beginning of the array. The push() and pop() methods support the Stack abstract data type, which is based on the LIFO (Last In First Out) model. The shift() and unshift() methods, on the other hand, support the FIFO (First In First Out) model.

The shift() method shifts off and returns the first element of the array, decreasing its size by one. Here is the method to be declared as a prototype of the Array object type:

function shift(str) {
  var val = this[0];
  for (var i = 1; i < this.length; ++i) {
    this[i-1] = this[i];
  }
  this.length--;
  return val;
}

The first line sets the returned value, the first element of the array. The for loop iterates over the array elements and shifts every element to its previous position:

this[i-1] = this[i];

The last two lines decrement the size of the array by one and returned the value of the first element, val.

When the browser is a pre-5.5 version of Internet Explorer, we need to extend the Array's prototype with the new shift() method:

if (bName() == 1 && bVer() >= 5.5)
else {
  Array.prototype.shift = shift;
}

We do nothing when the browser is IE 5.5 or higher. For other browsers or lower versions, we assign the home-brewed shift() method.

The unshift() method appends a list of elements to the beginning of the array. Here is our implementation:

function unshift() {
  var i = unshift.arguments.length;
  for (var j = this.length - 1; j >= 0; --j) {
    this[j + i] = this[j];
  }
  for (j = 0; j < i; ++j) {
    this[j] = unshift.argument[j];
  }
}

We extract the number of new elements, i, from the arguments array's length. The first for loop shifts all existing elements i places up:

this[j + i] = this[j];

The second for loop inserts the new elements into the first i places of the array:

this[j] = unshift.arguments[j];

When the browser is a pre-5.5 version, we need to extend the Array's prototype with the new unshift() method:

if (bName() == 1 && bVer() >= 5.5)
else {
  Array.prototype.unshift = unshift;
}

We do nothing when the browser is IE 5.5 or higher. For lower versions, we assign the home-brewed unshift() method.

See a demo of the above methods in Column 59, IE 5.5: Formatting, URIs, and Stack Operations.


People who read this tip also read these tips:

Look for similar tips by subject:



JupiterOnlineMedia

internet.comearthweb.comDevx.commediabistro.comGraphics.com

Search:

Jupitermedia Corporation has two divisions: Jupiterimages and JupiterOnlineMedia

Jupitermedia Corporate Info


Legal Notices, Licensing, Reprints, & Permissions, Privacy Policy.

Advertise | Newsletters | Tech Jobs | Shopping | E-mail Offers

Solutions
Whitepapers and eBooks
IBM eBook: Planning a Service Oriented Architecture
IBM eBook: Choosing the Right Architecture--What It Means for You and Your Business
Microsoft Article: Will Hyper-V Make VMware This Decade's Netscape?
Avaya Article: Using Intelligent Presence to Create Smarter Business Applications
Intel Go Parallel Article: Getting Started with TBB on Windows
Microsoft Article: 7.0, Microsoft's Lucky Version?
Avaya Article: How to Feed Data into the Avaya Event Processor
IBM Article: Developing a Software Policy for Your Organization
Microsoft Article: Managing Virtual Machines with Microsoft System Center
Intel Go Parallel Article: Intel Threading Tools and OpenMP
HP eBook: Storage Networking , Part 1
Microsoft Article: Solving Data Center Complexity with Microsoft System Center Configuration Manager 2007
MORE WHITEPAPERS, EBOOKS, AND ARTICLES
Webcasts
HP Video: StorageWorks EVA4400 and Oracle
HP Webcast: Storage Is Changing Fast - Be Ready or Be Left Behind
Microsoft Silverlight Video: Creating Fading Controls with Expression Design and Expression Blend 2
MORE WEBCASTS, PODCASTS, AND VIDEOS
Downloads and eKits
Red Gate Download: SQL Toolbelt and free High-Performance SQL Code eBook
Iron Speed Designer Application Generator
MORE DOWNLOADS, EKITS, AND FREE TRIALS
Tutorials and Demos
Silverlight 2 App and Walkthrough: Leverage Silverlight 2 with SQL Server and XML
IBM Article: Enterprise Search--Do You Know What's Out There?
HP Demo: StorageWorks EVA4400
Microsoft Article: The Progress and Promise of Deep Zoom
Microsoft How-to Article: Get Going with Silverlight and Windows Live
MORE TUTORIALS, DEMOS AND STEP-BY-STEP GUIDES
webref The latest from WebReference.com Browse >
Book Review: Head First JavaScript · Web Hosting Control Panels · Use Your Blog for Fast Search Engine Rankings
Sitemap · Experts · Tools · Services · Email a Colleague · Contact FREE Newsletters 
 The latest from internet.com
NetApp's Virtual Storage Strategy Crystallizes · F/MC Watch: A Cisco-Centric Approach · Olympic Time Trials Use Wi-Fi Mesh