JavaScript中清空數組的三種方式,javascript三種方式
方式1,splice
123 |
var ary = [1,2,3,4]; ary.splice(0,ary.length); console.log(ary); // 輸出 Array[0],空數組,即被清空了 |
方式2,length賦值為0
這種方式很有意思,其它語言如Java,其數組的length是唯讀,不能被賦值。如
12 |
int [] ary = { 1 , 2 , 3 , 4 }; ary.length = 0 ; |
Java中會報錯,編譯通不過。而JS中則可以,且將數組清空了,
123 |
var ary = [1,2,3,4]; ary.length = 0; console.log(ary); // 輸出 [],空數組,即被清空了 |
目前 Prototype中數組的 clear 和mootools庫中數組的 empty 使用這種方式清空數組。
方式3,賦值為[]
12 |
var ary = [1,2,3,4]; ary = []; // 賦值為一個空數組以達到清空原數組 |
這裡其實並不能說是嚴格意義的清空數組,只是將ary重新賦值為空白數組,之前的數組如果沒有引用在指向它將等待記憶體回收。
Ext庫Ext.CompositeElementLite類的 clear 使用這種方式清空。
方式2 保留了數組其它屬性,方式3 則未保留。很多人認為方式2的效率很高些,因為僅僅是給length重新賦值了,而方式3則重建立立個對象。經 測試 恰恰是方式3的效率高。測試代碼:
123456789 |
var a = []; for ( var i=0; i< 1000000; i++){ a.push(i); } var start = new Date(); //a = []; a.length = 0; var end = new Date(); alert(end - start); |
測試結果:
以上結果可看到:方式3更快,效率更高。因此如果不保留原數組的其它屬性Ext採用的方式更值得推薦。
怎清空javascript數組
當一個數組需要清空的時候,很多人使用下面的方法:複製代碼 代碼如下:a = [];我們知道javascript變數儲存方式分為參考型別和直接量。數組屬於對象,即參考型別,引用的是變數指標地址,之所以這樣設計也是為了節省記憶體。再說到上面的請空數組的方式,如果採用直接賦值一個新數組的方式,那麼之前引用的數組可能不會被釋放(有其他的引用),例如下面的代碼:複製代碼 代碼如下:var a = [2,3];var b = a;a = [];console.log(b);這時候a和b就不是同一個數組了,清空了a而b還是指到之前的引用地址,除非你是故意的,否則這將會有隱患。所以最佳的請空數組方式是:將length設定為0,即:複製代碼 代碼如下:a.length = 0;
javascript 從一個數組中 刪除 一個數組
<script type="text/javascript">
var a =["1","2","4","5"];
var b=["1","2","3"];
for(var i=0,len=b.length;i<len;i++){
if(a.indexOf(b[i])>=0){
for(var j=0,alen=a.length;j<alen;j++){
if(a[j]==b[i]){
delAElem(a,j);
}
}
}
}
alert(a);
function delAElem(array,num){
for(var i=num,len=a.length;i<len-num;i++){
array[i]=array[i+1];
}
a.length--;
}
</script>
思路是先找到重複元素在a資料中的index,之後再將a數組元素向前移動,最後修改數組長度