有A,B两个数组
数组A中有a,b,c,d四个元素,数组B中有1,0,0,2四个元素
现在要得到结果是 数组A:a,d 数组B:1,2 即删除B中为0的元素B[1],B[2]以及删除数组A中对应的A[1],A[2]我写的代码如下:for(i=0;i<B.length;i++){
if(B[i]<=0){
B.splice(i,1);
A.splice(i,1);
}
}
可以没有得到我要的效果,请高手指点。谢谢

解决方案 »

  1.   

      Array.prototype.remove=function(dx)
      {    if(isNaN(dx)||dx>this.length){return false;}
        for(var i=0,n=0;i<this.length;i++)
        {
            if(this[i]!=this[dx])
            {
                this[n++]=this[i]
            }
        }
        this.length-=1
      }
      a = ['1','2','3','4','5'];
      alert("elements: "+a+"nLength: "+a.length);
      a.remove(0); //删除下标为0的元素
      alert("elements: "+a+"nLength: "+a.length);应该能理解吧?
    等于说是把数组中指定的元素删除之后重构了一下
      

  2.   

    splice只会返回截取都的结果,不会改变数组本身
      

  3.   

    splice 方法
    从一个数组中移除一个或多个元素,如果必要,在所移除元素的位置上插入新元素,返回所移除的元素。
    确实可以移除数据的,只不过你没考虑到当你移除了数据后,数组的长度是改变的。
    所以下标相应的就出现了问题。只要从后往前找就没问题了:var a = new Array('a','b','c','d');
    var b = new Array(1,0,0,2);
    for(var i=b.length-1;i >-1;i--){
        if(b[i] <=0){
            b.splice(i,1);
            a.splice(i,1);
        }

    alert(a);
    alert(b);
      

  4.   

    function listRemove(cElementId){
        var isMove=false;
        for(var i=0;i<arrCus.length;i++){
            if(arrCus.ulid==cElementId){
                if(i!=arrCus.length){
                    var tmp=arrCus[i];
                    arrCus[i]=arrCus[i+1];
                    arrCus[i+1]=tmp;
                }
                isMove=true;
            }
        }
        arrCus.pop();
    }
      

  5.   

    其实很简单。一行代码就可以搞定。
    比如:
    var a = [1,2,3,4];
    removeFromArray(a,3); //将会输出[1,2,4]//函数在这里
    function removeFromArray(arr,i)
    {
         return arr.slice(0,i-1).concat(arr.slice(i));
    }