找到没有删除项目的Javascript数组长度

时间:2009-10-15 04:19:20

标签: javascript arrays

一个简单的问题,我似乎无法找到答案。

  

myarray.length()

以上将返回包含已删除项目的长度。如何在没有删除项目的情况下获得长度?感谢

编辑:

感谢您的回答。我正在删除写'删除myarray [0]',这很好用。脚本的其他部分依赖于length()方法来返回包括删除的长度。拼接方法看起来像我想要的,所以我会尝试这个

4 个答案:

答案 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运算符,则应在删除后从数组中获得准确的计数。

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

答案 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