[碼海拾貝 之JS] JS 之刪除數組中的元素
來源:程序員人生 發布時間:2014-11-24 08:50:18 閱讀次數:2165次
前言
在Java 中要從1個list 中刪除1個元素, 直接使用 remove 方法就能夠了。
在js 中的array 并沒有 remove 方法, 但是在js 中array 有splice 方法可以達成相同的效果, 除此以外, 還可使用其他方式來實現這個效果。
使用splice 方法實現從數組中刪除元素
首先看1下 splice 方法如何使用。
語法
arrayObject.splice(index,howmany,item1,.....,itemX)
參數 | 描寫 |
index | 必須。整數,規定添加/刪除項目的位置,使用負數可從數組結尾處規定位置。 |
howmany | 必須。要刪除的項目數量。如果設置為 0,則不會刪除項目。 |
item1, ..., itemX | 可選。向數組添加的新項目。 |
需要特別注意的就是,該方法會改變原始數組。
最簡單例子: -- 刪除數組1個元素
<script>
var array1 = ["name1","name2","name3","name4"];
array1.splice(1,1);
alert(array1);
</script>
輸出是: name1,name3,name4
解析:
1. splice(1,1) -刪除第2個元素。
第1個 1 是位置, 位置從0 開始, 這個不難理解;
第2個1 是個數, 刪除1個元素。
2. 其實不需要 array1 = XXX; 的方式 數組的值就改變了。 緣由上面也說了。
繼續, 如果要在刪除的位置同時添加1個元素的話:
<script>
var array1 = ["name1","name2","name3","name4"];
array1.splice(1,1,"name5");
alert(array1);
</script>
輸出: name1name5,,name3,name4
刪除復雜數組中的元素
以上例子的數組中的元素是1般的字符串。
這里所謂的復雜數組是指數組中的元素是對象而不是簡單的字符串。
開始這個之前, 先寫1個把js array 轉成 str 的方法:
function arrayToString(array)
{
var str = "";
if(array!=null&&array.length>0)
{
str += "[";
for(var i=0;i<array.length;i++)
{
var objStr = "";
objStr += "{";
var obj = array[i];
for(var key in obj)
{
objStr += key;
objStr += ":'";
objStr += obj[key];
objStr += "'";
objStr += ",";
}
if(objStr.length>3)
{
objStr = objStr.substring(0,objStr.length⑴);
}
objStr += "}";
str += objStr;
if(i<array.length⑴)
{
str += ",";
}
}
str += "]";
}
return str;
}
接下來, 刪除1個元素類型為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<array1.length;i++)
{
var keyTemp = array1[i].key;
if(keyTemp===delKey)
{
array1.splice(i,1);
}
}
alert(arrayToString(array1));
</script>
說明:
1. 這里的key 是唯1, name 值不為已
2. 這里數組循環不是用 forEach是由于 IE不支持
細部參見:
3. 以上是刪除唯1key 值的元素。
Javascript 數組循環遍歷之forEach
整體來講, 以上1次只刪除1個元素, 如果1次刪除多個元素的話呢?
類似刪除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.length;i++)
{
var nameTemp = array1[i].name;
if(nameTemp===delName)
{
array1.splice(i,1);
}
}
alert(arrayToString(array1));
</script>
但是千萬注意, 以上的寫法是毛病的。
應為第1次刪除1個元素以后, array1 的長度變化, 對應到各個位置的元素也產生變化。
所以以上的寫法:
1. 要末出現毛病, 報找不到指定位置的元素
2. 要末履行的結果不對。 上面的例子就是屬于這類。
針對這類狀態, 可以想到的解法有:
1. 1次刪除1個, 多循環幾次
2. 另外一中方法就是, new 1個 新的array , 把不需要刪除的元素放入這個array , 再用這個array 替換舊的array .
生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈