Entry
How do you prototype Array to add a function like shift?
Jan 23rd, 2001 03:56
Acebone, acebone, Martin Honnen,
Here is the code
function Array_shift () {
var el = this[0];
for (var i = 1; i < this.length; i++)
this[i - 1] = this[i];
this.length = this.length - 1;
return el;
}
if (window.Array && !window.Array.prototype.shift)
window.Array.prototype.shift = Array_shift;
Example:
var a = [1, 2, 3];
alert(a.shift());
alert(a);
===========================================================
Actually Peter Belesis has made an entire implementation
of the array functions not supported by Internet Exploder.
He has released it under the GNU license so I feel free to
post the code. Copy/Paste it into a .js file and include it
in your page as you see fit.
To read an interesting tutorial on arrays by Peter visit:
http://www.webreference.com/dhtml/column33/
* -------------------- Code Begin -------------------------------------
--
/* arrayprototype.js
* by Peter Belesis. v1.0 000516
* Copyright (c) 2000 Peter Belesis. All Rights Reserved.
* Originally published and documented at http://www.dhtmlab.com/
* License to use is granted if and only if this entire copyright notice
* is included.
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
* ---------------------------------------------------------------------
-
* array_roll function (c) 2001 Esben Maaløe, same licensing terms as
above.
*/
if(Array.prototype.push && ([0].push(true)==true))Array.prototype.push
= null;
if(Array.prototype.splice && typeof([0].splice(0))=="number")
Array.prototype.splice = null;
if(!Array.prototype.shift) {
function array_shift() {
firstElement = this[0];
this.reverse();
this.length = Math.max(this.length-1,0);
this.reverse();
return firstElement;
}
Array.prototype.shift = array_shift;
}
if(!Array.prototype.unshift) {
function array_unshift() {
this.reverse();
for(var i=arguments.length-1;i>=0;i--){
this[this.length]=arguments[i]
}
this.reverse();
return this.length
}
Array.prototype.unshift = array_unshift;
}
if(!Array.prototype.push) {
function array_push() {
for(var i=0;i<arguments.length;i++){
this[this.length]=arguments[i]
};
return this.length;
}
Array.prototype.push = array_push;
}
if(!Array.prototype.pop) {
function array_pop(){
lastElement = this[this.length-1];
this.length = Math.max(this.length-1,0);
return lastElement;
}
Array.prototype.pop = array_pop;
}
if(!Array.prototype.splice) {
function array_splice(ind,cnt){
if(arguments.length == 0) return ind;
if(typeof ind != "number") ind = 0;
if(ind < 0) ind = Math.max(0,this.length + ind);
if(ind > this.length) {
if(arguments.length > 2) ind = this.length;
else return [];
}
if(arguments.length < 2) cnt = this.length-ind;
cnt = (typeof cnt == "number") ? Math.max(0,cnt) : 0;
removeArray = this.slice(ind,ind+cnt);
endArray = this.slice(ind+cnt);
this.length = ind;
for(var i=2;i<arguments.length;i++){
this[this.length] = arguments[i];
}
for(var i=0;i<endArray.length;i++){
this[this.length] = endArray[i];
}
return removeArray;
}
Array.prototype.splice = array_splice;
}
if (!window.Array.prototype.roll)
{
function array_roll (direction) {
direction = direction || false
if ( !direction )
{
this.splice(this.length, 1, this[0])
this.splice(0,1)
} else
{
this.splice(0,0, this[this.length-1])
this.splice(this.length-1,1)
}
}
window.Array.prototype.roll = array_roll;
}
* -------------------- Code End ----------------------------------------
-