2009-10-15 77 views
5

只是一個簡單的問題,我似乎無法找到答案。查找Javascript數組長度,而不刪除的項目

myarray.length()

上面將返回包括已刪除的項目的長度。如何獲得沒有刪除項目的長度?謝謝

編輯:

感謝您的答案。我通過寫'刪除myarray [0]'來刪除,這很好。腳本的其他部分依賴於length()方法來返回包含刪除的長度。拼接方法看起來像我想要什麼,所以我會嘗試這個

回答

13

我認爲你正在使用delete operator刪除您的數組元素。

此操作將刪除指定索引處的元素,但數組的長度不會受到影響,例如:

var a = [1,2,3]; 

delete a[0]; 

console.log(a); // results in [undefined, 2, 3] 

如果你想刪除的元素和移位索引,則可以使用splice功能:

var a = [1,2,3]; 

a.splice(0,1); 

console.log(a); // [2, 3] 

你可以實現一個簡單的函數刪除指定索引的元素:

Array.prototype.removeAt = function (index) { 
    this.splice(index,1); 
}; 
+3

你怎麼能不討厭javascript ... – 2015-08-19 07:54:49

1

約翰Resig的(jQuery的作者)寫了一個函數從Javascript中的數組(真的)刪除的項目。如果你使用這個函數而不是刪除操作符,你應該在刪除後從數組中得到一個精確的計數。

http://ejohn.org/blog/javascript-array-remove/

+0

你知道他爲什麼這麼做嗎?這似乎是多餘的,表現比標準的內置拼接方法更差。 – bobince 2009-10-15 10:06:27

+0

方法全面;它使用Splice,但它也做了其他一些事情。 – 2009-10-15 16:55:51

1

如果你想使用稀疏陣列(完全合法的),但要計算定義的元素的數量某些原因,你可以只使用reduce(),例如:

var arr = [1, 2, undefined, 3, undefined, undefined, 4]; 
arr.reduce(function(prev, curr) { 
    return typeof curr !== "undefined" ? prev+1 : prev; 
}, 0); // evaluates to 4 

所有現代瀏覽器IE9 +均支持reduce()。對於舊版瀏覽器,在MDN處有一個polyfill和更多信息:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce

+0

這爲我工作,因爲我需要保持我的數組的索引。 – Ozzyberto 2014-01-30 16:56:25

1

您可以使用作爲循環,它省略了已刪除的項目。

var a = [1,2,3,4,5]; 
delete a[0]; 
delete a[1]; 

for(var i=0;i<a.length;i++){} 
console.log(i); //5 

var j=0; 
for(var i in a){j++;} 
console.log(j); //3 
+0

這可能是數千倍比tobek建議的減速方法快。 https://jsperf.com/length-of-sparse-array/1 – Luckyrat 2017-06-11 21:24:31

相關問題