我怎样才能获得数组的实际数量?

时间:2015-08-07 16:25:08

标签: javascript arrays count size

我试过这种方式,但它给了我错误的计数:

myArr = [];
myArr[666] = 'hello there';
console.log(myArr.length); // returns me 667

它应该是1.我怎样才能以最快的方式获得好计数?

4 个答案:

答案 0 :(得分:17)

  

应该是1。

不,它应该是667,因为这是length为JavaScript中的标准数组定义的var count = 0; myArr.forEach(function() { ++count; }); console.log(count); aren't really arrays at all。 JavaScript中的数组本质上是稀疏的,这意味着它们中可能有漏洞(索引中不存储任何类型的值)。

  

我怎样才能以最快的方式获得好计数?

唯一的方法是循环。例如:

reduce

...或forEach中的reduceforEachreduce和其他此类访问条目实际存在,因此它们会跳过稀疏数组中的漏洞。

我应该提一下,因为IE8仍然(叹气)拥有相当大的市场份额,如果你想使用它们,你需要在其上加var count = 0, name; for (name in myArr) { if (myArr.hasOwnProperty(name) && /^[0-9]+$/.test(name)) { ++count; } } <td>{{trans.Status}}</td> <td>{{trans.PaymentId}}</td> <td>{{trans.TransId || 'N\A'}}</td> 等。 (这很容易。)

要做到这一点,没有任何垫片,只计算实际的索引属性(而不是其他类型的属性),然后松散地:

mach_absolute_time()

使用略微宽松的索引属性名称定义;如果你想要一个健壮的,请参阅&#34;正确使用for-in&#34; maček's answer的一部分。

答案 1 :(得分:8)

您可以使用reduce

计算非未定义属性的数量
var length = myArr.reduce(function(len) { return len+1; }, 0);
console.log(length); // 1

答案 2 :(得分:5)

因为数组的索引为0. [0...666]是667个项目。如果您真的想要计算您拥有的物品数量,那么阵列可能不是最佳解决方案。

答案 3 :(得分:4)

您可以使用Object.keys()

Object.keys(myArr).length;

来自文档:

  

Object.keys返回一个数组,其元素是对应的字符串   到直接在对象上找到的可枚举属性。订购   属性与循环遍历的属性相同   手动对象的属性。

此功能为compatible with IE9+。该文档还包含一个功能,可以添加该功能以在所有浏览器中兼容:

if (!Object.keys) Object.keys = function(o) {
  if (o !== Object(o))
    throw new TypeError('Object.keys called on a non-object');
  var k=[],p;
  for (p in o) if (Object.prototype.hasOwnProperty.call(o,p)) k.push(p);
  return k;
}