js刪除數組裏的某個元素

刪除指定元素:javascript

首先能夠給JS的數組對象定義一個函數,用於查找指定的元素在數組中的位置,即索引,代碼爲:java

Array.prototype.indexOf = function(val) {
    for (var i = 0; i < this.length; i++) {
        if (this[i] == val) return i;
    }
    return -1;
};

而後使用經過獲得這個元素的索引,使用js數組本身固有的函數去刪除這個元素:
代碼爲:數組

Array.prototype.remove = function(val) {
    var index = this.indexOf(val);
    if (index > -1) {
        this.splice(index, 1);
    }
};

這樣就構造了這樣一個函數,好比我有有一個數組:函數

var emp = ['abs','dsf','sdf','fd']

假如咱們要刪除其中的fd,就可使用:this

emp.remove('fd');


刪除指定下標的元素:spa

    1.原生的delete 函數:prototype

delete方法:delete arr[1] 表示從數組中刪除索引爲1的元素,注意該方法在刪除數組中元素的時候,這種方式數組長度不變,此時arr[1]變爲undefined了,可是也有好處原來數組的索引也保持不變,code

代碼:對象

var arr=['a','b','c'];
delete arr[1];
console.info(arr);

輸出:索引

0: "a"
2: "c"
length: 3 //delete方法不會改變array數組的length屬性

此時要遍歷數組元素能夠纔可使用,

遍歷:

for(index in arr) 
{ 
   document.write('arr['+index+']='+arr[index]); 
}

這種遍歷方式跳過其中undefined的元素

2.數組對象splice方法:arr.splice(1,1);

JavaScript經過設置數組的length屬性來截斷數組是唯一一種縮短數組長度的方法.若是使用delete運算符來刪除數組中元素,雖然那個元素變成未定義的,可是數組的length屬性並不改變兩種刪除元素,數組長度也改變的方法.

代碼1:

    /*
  * 方法:Array.remove(dx)
  * 功能:刪除數組元素.
  * 參數:dx刪除元素的下標.
  * 返回:在原數組上修改數組
  */
//常常用的是經過遍歷,重構數組
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//改變length屬性
 }
 a = ['1','2','3','4','5'];
 a.remove(0); //刪除下標爲0的元素

代碼2:

/*
  * 方法:Array.baoremove(dx)
  * 功能:刪除數組元素.
  * 參數:dx刪除元素的下標.
  * 返回:在原數組上修改數組.
  */
  
 //咱們也能夠用splice來實現.
  
 Array.prototype.baoremove = function(dx)
 {
  if(isNaN(dx)||dx>this.length){return false;}
  this.splice(dx,1);
 }
 b = ['1','2','3','4','5'];
 b.baoremove(1); //刪除下標爲1的元素

代碼3:

//利用Array對象的兩個方法slice、concat來自定義刪除數組的方法
Array.prototype.del=function(n) { //n表示第幾項,從0開始算起。
    //prototype爲對象原型,注意這裏爲對象增長自定義方法的方法。
   if(n<0) //若是n<0,則不進行任何操做。
      return this;
   else
      return this.slice(0,n).concat(this.slice(n+1,this.length));
  /*
   concat方法:返回一個新數組,這個新數組是由兩個或更多數組組合而成的。
         這裏就是返回this.slice(0,n)合併this.slice(n+1,this.length)
         組成的新數組,這中間,恰好少了第n項(至關於把第n項元素刪除了...)
   slice方法: 返回一個數組的一段,兩個參數,分別指定開始和結束的位置。
  */
}
var test=new Array(0,1,2,3,4,5);
test=test.del(3); //從0算起,這裏也就是刪除第4項。
alert(test);

解釋一下slice,splice,concat方法的使用:

1.slice() 方法可從已有的數組中返回選定的元素。該方法不會改變原數組.它返回一個新的數組,包含從 start 到 end (不包括該元素)的 arrayObject 中的元素。

arrayObject.slice(start,end)

2.splice() 方法向數組中添加或者是刪除元素,而後返回被刪除的數組。該方法會改變原始數組。splice() 方法與 slice() 方法的做用是不一樣的,splice() 方法會直接對數組進行修改.

arrayObject.splice(index,howmany,item1,.....,itemX)

index:必需。整數,規定添加/刪除的元素的位置,使用負數可從數組結尾處規定位置。

howmany:必需。被刪除的數組元素的個數。若是設置爲 0,則不會刪除元素,即向數組中添加元素。若是爲1,表示刪除一個元素,若是2,表示刪除數組中兩個元素。

item1, ..., itemX:可選。向數組添加的新項目。

建立一個新數組,並向其添加一個元素:

<script type="text/javascript">

    var arr = new Array(6)
    arr[0] = "George"
    arr[1] = "John"
    arr[2] = "Thomas"
    arr[3] = "James"
    arr[4] = "Adrew"
    arr[5] = "Martin"
    
    document.write(arr + "<br />")arr.splice(2,0,"William")document.write(arr + "<br />")

</script>

輸出:

George,John,Thomas,James,Adrew,Martin
George,John,William,Thomas,James,Adrew,Martin

刪除位於 index 2 的元素,並添加一個新元素來替代被刪除的元素:

<script type="text/javascript">

var arr = new Array(6)
arr[0] = "George"
arr[1] = "John"
arr[2] = "Thomas"
arr[3] = "James"
arr[4] = "Adrew"
arr[5] = "Martin"

document.write(arr + "<br />")arr.splice(2,1,"William")document.write(arr)

</script>

輸出:

George,John,Thomas,James,Adrew,Martin
George,John,William,James,Adrew,Martin

刪除從 index 2 ("Thomas") 開始的三個元素,並添加一個新元素 ("William") 來替代被刪除的元素:

<script type="text/javascript">

var arr = new Array(6)
arr[0] = "George"
arr[1] = "John"
arr[2] = "Thomas"
arr[3] = "James"
arr[4] = "Adrew"
arr[5] = "Martin"

document.write(arr + "<br />")arr.splice(2,3,"William")document.write(arr)

</script>

輸出:

George,John,Thomas,James,Adrew,Martin
George,John,William,Martin

3.concat() 方法用於鏈接兩個或多個數組,該方法不會改變現有的數組,而僅僅會返回被鏈接數組的一個副本。

相關文章
相關標籤/搜索