只是一個簡單的問題,我似乎無法找到答案。查找Javascript數組長度,而不刪除的項目
myarray.length()
上面將返回包括已刪除的項目的長度。如何獲得沒有刪除項目的長度?謝謝
編輯:
感謝您的答案。我通過寫'刪除myarray [0]'來刪除,這很好。腳本的其他部分依賴於length()方法來返回包含刪除的長度。拼接方法看起來像我想要什麼,所以我會嘗試這個
只是一個簡單的問題,我似乎無法找到答案。查找Javascript數組長度,而不刪除的項目
myarray.length()
上面將返回包括已刪除的項目的長度。如何獲得沒有刪除項目的長度?謝謝
編輯:
感謝您的答案。我通過寫'刪除myarray [0]'來刪除,這很好。腳本的其他部分依賴於length()方法來返回包含刪除的長度。拼接方法看起來像我想要什麼,所以我會嘗試這個
我認爲你正在使用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);
};
約翰Resig的(jQuery的作者)寫了一個函數從Javascript中的數組(真的)刪除的項目。如果你使用這個函數而不是刪除操作符,你應該在刪除後從數組中得到一個精確的計數。
你知道他爲什麼這麼做嗎?這似乎是多餘的,表現比標準的內置拼接方法更差。 – bobince 2009-10-15 10:06:27
方法全面;它使用Splice,但它也做了其他一些事情。 – 2009-10-15 16:55:51
如果你想使用稀疏陣列(完全合法的),但要計算定義的元素的數量某些原因,你可以只使用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
這爲我工作,因爲我需要保持我的數組的索引。 – Ozzyberto 2014-01-30 16:56:25
您可以使用作爲循環,它省略了已刪除的項目。
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
這可能是數千倍比tobek建議的減速方法快。 https://jsperf.com/length-of-sparse-array/1 – Luckyrat 2017-06-11 21:24:31
你怎麼能不討厭javascript ... – 2015-08-19 07:54:49