[碼海拾貝 之JS] JS 之刪除數組中的元素

前言

在Java 中要從一個list 中刪除一個元素, 直接使用 remove 方法就可以瞭。

在js 中的array 並沒有 remove 方法, 但是在js 中array 有splice 方法可以達成相同的效果, 除此之外, 還可以使用其他方式來實現這個效果。

使用splice 方法實現從數組中刪除元素

首先看一下 splice 方法如何使用。

語法

arrayObject.splice(index,howmany,item1,.....,itemX)
參數 描述
index 必需。整數,規定添加/刪除項目的位置,使用負數可從數組結尾處規定位置。
howmany 必需。要刪除的項目數量。如果設置為 0,則不會刪除項目。
item1, …, itemX 可選。向數組添加的新項目。

需要特別註意的就是,該方法會改變原始數組。

最簡單例子: — 刪除數組一個元素

<script>
var array1 = ["name1","name2","name3","name4"];
array1.splice(1,1);
alert(array1);
</script>

輸出是: name1,name3,name4

解析:

1. splice(1,1) -刪除第二個元素。

第一個 1 是位置, 位置從0 開始, 這個不難理解;

第二個1 是個數, 刪除一個元素。

2. 並不需要 array1 = XXX; 的方式 數組的值就改變瞭。 原因上面也說瞭。

繼續, 如果要在刪除的位置同時添加一個元素的話:

<script>
var array1 = ["name1","name2","name3","name4"];
array1.splice(1,1,"name5");
alert(array1);
</script>

輸出: name1name5,,name3,name4

刪除復雜數組中的元素

以上例子的數組中的元素是一般的字符串。

這裡所謂的復雜數組是指數組中的元素是對象而不是簡單的字符串。

開始這個之前, 先寫一個把js array 轉成 str 的方法:

function arrayToString(array)
{
var str = "";
if(array!=null&&array.length>0)
{
str += "[";
for(var i=0;i3)
{
objStr = objStr.substring(0,objStr.length-1);
}
objStr += "}";
str += objStr;
if(i
接下來, 刪除一個元素類型為object 的數組元素

<script>
var obj1 = {key:"key1",name:'name1_1'};
var obj2 = {key:"key2",name:'name1_1'};
var obj3 = {key:"key3",name:'name2_2'};
var obj4 = {key:"key4",name:'name2_2'};

var array1 = [obj1,obj2,obj3,obj4];

//delete by key
var delKey = "key2";
for(var i=0;i
說明:

1. 這裡的key 是唯一, name 值不為已

2. 這裡數組循環不是用 forEach是因為 IE不支持

細部參見:

3. 以上是刪除唯一key 值的元素。

Javascript 數組循環遍歷之forEach

總體來說, 以上一次隻刪除一個元素, 如果一次刪除多個元素的話呢?

類似刪除name 值是 “name1_1” 的元素, 對應到的是兩個元素, 寫法對應到應該是:

<script>
var obj1 = {key:"key1",name:'name2_2'};
var obj2 = {key:"key2",name:'name2_2'};
var obj3 = {key:"key3",name:'name1_1'};
var obj4 = {key:"key4",name:'name1_1'};

var array1 = [obj1,obj2,obj3,obj4];

//delete by name
var delName= "name2_2";
for(var i=0;i
但是千萬註意, 以上的寫法是錯誤的。

應為第一次刪除一個元素之後, array1 的長度變化, 對應到各個位置的元素也發生變化。

所以以上的寫法:

1. 要麼出現錯誤, 報找不到指定位置的元素

2. 要麼執行的結果不對。 上面的例子就是屬於這種。

針對這種狀況, 可以想到的解法有:

1. 一次刪除一個, 多循環幾次

2. 另一中方法就是, new 一個 新的array , 把不需要刪除的元素放入這個array , 再用這個array 替換舊的array .

發佈留言