一个简单的问题,我似乎无法找到答案。
myarray.length()
以上将返回包含已删除项目的长度。如何在没有删除项目的情况下获得长度?感谢
编辑:
感谢您的回答。我正在删除写'删除myarray [0]',这很好用。脚本的其他部分依赖于length()方法来返回包括删除的长度。拼接方法看起来像我想要的,所以我会尝试这个
答案 0 :(得分: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);
};
答案 1 :(得分:1)
John Resig(jQuery的作者)写了一个函数(真的)在Javascript中从数组中删除项目。如果使用此函数而不是delete运算符,则应在删除后从数组中获得准确的计数。
答案 2 :(得分: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
答案 3 :(得分:1)
您可以使用 for..in loop ,它会省略已删除的项目。
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