繁体   English   中英

在Javascript中查找数组长度

[英]Find Array length in Javascript

这听起来是一个非常愚蠢的问题。 我们怎样才能在JavaScript中找到数组的确切长度; 更确切地说,我想找到阵列中占据的总位置。

我有一个简单的场景,我想大多数人可能都知道。

var a = [1,2,3];
a.length; //This will output 3

现在,如果我给

a[100] = 100;
a.length; // The output is 101; 

我想得到数组的确切大小,在上面的例子中应该是4。

这将为您提供数组中真正存在的元素数量:

Object.keys(a).length

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array#Relationship_between_length_and_numerical_properties

编辑

正如JLRishe的评论所指出的, Object.keys(a).length返回对象a中存在的键的数量。 如果我添加这样的键:

a= [1,2,3];
a['key']= "akey";

然后Object.keys(a).length将返回4

但是“key”不是数组的一部分,它是数组Object的属性, console.log(a)给你[1,2,3]。

因此,要获得更可靠的数组元素数量值,我们只需计算正整数键值:

Object.keys(a).filter(function(el){return !(+el % 1) && +el>=0 && +el < Math.pow(2,32) ;}).length 

Object.keys返回String数组。 使用a['1']a[1]在数组中赋值是等效的。 数组索引键也必须小于2 ^ 32。

TL; DR我能想到的最简单可靠的方法如下:

var count = a.filter(function() { return true; }).length;

在现代JavaScript引擎中,这可以缩短为:

var count = a.filter(() => true).length;


完整答案:

检查undefined是不够的,因为数组实际上可能包含 undefined值。

找到元素数量的可靠方法是......

使用in运算符:

 var count = 0; for (var i = 0; i < a.length; i += 1) { if (i in a) { count += 1; } } 

使用.forEach()其基本上使用in引擎盖下):

 var a = [1, undefined, null, 7]; a[50] = undefined; a[90] = 10; var count = 0; a.forEach(function () { count += 1; }); console.log(count); // 6 

或者使用带有始终为true的谓词的.filter()

 var a = [1, undefined, null, 7]; a[50] = undefined; a[90] = 10; var count = a.filter(function () { return true; }).length; console.log(count); // 6 

数组的大小正是length属性所显示的。

即使你只给前3个位置(0,1,2)赋值,当你给a [100]赋值100时,你把它调整到101个位置。 因此,您将得到每个位置的计数,从0(第一个索引)到100(最后一个索引),即使它们没有值。

使用您的代码: a[100] = 100 ,您将在阵列中的位置100处创建一个块。 (从0开始,总共101)。

如果要查看块中有多少实际答案,则必须使用循环并循环检查哪些字段不等于undefined。 有几种方法可以forwhileforeach等。

只需实现一个计数器并计算数组中不等于nullundefined 这将为您提供数组中实际使用的位数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM