在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。
您要查找的不是数组的长度,而是该数组中分配的数值。
Array.length
不会给您该结果,而是给您分配的值的总数。
一个解决方法是计算数组后面对象的属性,使用:
Object.keys(a).length
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array#Relationship_between_length_and_numerical_properties
但需要注意的是:
- 它还会计算文字属性,比如a.a_property。我认为这不是你想要的。因此,您必须筛选该结果:
CCD_ 2检查CCD_ 3是否可以被视为数字属性,即使它具有字符串类型。
- 您希望只计算正整数,因此必须使用以下内容对其进行筛选:
+el>=0
- 最后,由于数组大小限制为2^32,您还需要筛选大于此值的正整数:
+el < Math.pow(2,32)
从功能上讲,你会得到这个过滤器的结果:
Array.realLength= Object.keys(a).filter(function(el){return !(+el % 1) && +el>=0 && +el < Math.pow(2,32) ;}).length
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
或者将.filter()
与始终为true的谓词一起使用:
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)。
如果你想知道块中有多少实际答案,你必须使用一个循环来检查哪些字段不等于未定义字段。有几十种方法可以使用for
、while
、foreach
等来实现这一点。
只需实现一个计数器,并对数组中不等于null
或undefined
的部分进行计数。这将为您提供数组中实际使用的位置数。
- Javascript(Angular)从一个对象数组到第二个数组查找值
- Lodash 从值数组中查找数组中的值
- 使用JS查找数组的平均值
- 咖啡脚本数组查找下一个位置
- 角度:通过数组查找其索引返回对象的内容
- 在循环中缓存数组查找是否有任何性能提升
- 在关联数组查找中未定义
- javascript数组查找具有当前日期+日期的最近日期
- jQuery使用相同的数组查找和删除数组中的字符串
- javascript数组查找时间最长,ID第一,如果超过当前值
- Javascript数组查找最大值
- 在Moongoose (MongoDB)中通过嵌入引用数组查找文档
- 在mongodb中通过数组查找一个字段的文档
- 使JavaScript中的数组查找更高效
- Javascript数组查找对象或元组
- 高效的Javascript数组查找
- 如何在猫鼬中按对象数组查找
- If else数组查找
- 不能在嵌入式数组查找中使用计数变量
- 对象键vs数组查找性能