http://expert.csdn.net/Expert/topic/1635/1635369.xml?temp=.3478052

解决方案 »

  1.   

    哦,原来已经有答案了.
    <SCRIPT LANGUAGE="JavaScript">
    <!--
    if (Array.splice==null)
    Array.prototype.splice = Splice;
    function Splice(a,b){
    a = parseInt(a);b=parseInt(b);
    if (isNaN(a)||isNaN(b)||a>this.length||a<0||b<0) return null;
    if (a+b>this.length) b=this.length-a;
    var ar=[],rs=[],i,l=this.length-b+arguments.length-2;
    for (i=a;i<a+b;i++) rs[i-a]=this[i];
    for (var i=2;i<arguments.length;i++) ar[ar.length]=arguments[i];
    for (var i=a+b;i<this.length;i++) ar[ar.length]=this[i];
    for (var i=0;i<ar.length;i++) this[a+i]=ar[i];
    this.length=l;
    return rs;
    }
    var a=["a","b","c","d","e","f"];
    alert(a.splice(2,2,"i","j","k"));
    alert(a)
    //-->
    </SCRIPT>
    写得很好,很佩服
      

  2.   

    其实第一行就是错的 :))if (Array.prototype.splice==null)
    Array.prototype.splice = Splice;
    function Splice(a,b){
    a = parseInt(a);b=parseInt(b);
    if (isNaN(a)||isNaN(b)||a>this.length||a<0||b<0) return null;
    if (a+b>this.length) b=this.length-a;
    var ar=[],rs=[],i,l=this.length-b+arguments.length-2;
    for (i=a;i<a+b;i++) rs[i-a]=this[i];
    for (var i=2;i<arguments.length;i++) ar[ar.length]=arguments[i];
    for (var i=a+b;i<this.length;i++) ar[ar.length]=this[i];
    for (var i=0;i<ar.length;i++) this[a+i]=ar[i];
    this.length=l;
    return rs;
    }if (Array.prototype.shift==null)
    Array.prototype.shift = Shift;
    function Shift(){
    var rs = this[0];
    for (var i=1;i<this.length;i++) this[i-1]=this[i]
    this.length=this.length-1
    return rs;
    }if (Array.prototype.unshift==null)
    Array.prototype.unshift = Unshift;
    function Unshift(){
    var ar=[];
    for (var i=0;i<arguments.length;i++) ar[i]=arguments[i];
    for (var i=0;i<this.length;i++) ar[ar.length]=this[i];
    for (var i=0;i<ar.length;i++) this[i]=ar[i];
    return this.length;
    }if (Array.prototype.pop==null)
    Array.prototype.pop = Pop;
    function Pop(){
    var rs=this[this.length-1];
    this.length = this.length-1;
    return rs;
    }
      

  3.   

    if(!Array.prototype.splice){
    function Array.prototype.splice(start,deleteCount){
    var ostart = this.slice(0,start);
    var delobj = this.slice(start,start+deleteCount);
    var oend = this.slice(start+deleteCount);
    var newArray = [];
    newArray = newArray.concat(ostart);
    for(var i=2;i<arguments.length;i++){newArray = newArray.concat(arguments[i])}
    newArray = newArray.concat(oend);
    this.length = newArray.length;
    for(var i=0;i<newArray.length;i++){this[i] = newArray[i]}
    return delobj;
    }
    }
      

  4.   

    if (Array.prototype.push==null)
    Array.prototype.push = Push;
    function Push(){
    var ar=[];
    for (var i=0;i<arguments.length;i++) this[this.length]=arguments[i];
    return this.length;
    }
      

  5.   

    由于本机没有装IE5.5或IE6,以上函数基本都是参考Netscape6中对应的函数实现的,返回值有可能与IE中定义的有所不同。有IE5.5+的朋友可否帮忙检查一下。splice是根据资料中描述的IE5.5+的形式返回的,因为netscape在slice一个元素时返回的不是数组而是元素被宣告为一个bug。据说push在IE中的返回值是数组的最后一个元素,不知然否?
      

  6.   

    xinyunyishui(心云意水) :slice本来是javascript1.2的方法,不知为何实现版本竟然是IE4+呵呵,还好我还没用脚本实现它。你的splice要是加上例外检查就更好了。
      

  7.   

    <script>
    var a=new Array('a','c','e')function del1(a,i){
    return a.slice(0,i).concat(a.slice(i+1))
    }
    function del2(a,i){
    a.splice(i,1)
    return a;
    }
    alert(del1(a,1));
    alert(del2(a,1));
    </script>