这可能听起来是一个非常愚蠢的问题。在JavaScript中,如何找到数组的确切长度;更准确地说,我想找到数组中占用的总位置数。
我有一个简单的情景,我猜你们大多数人都知道。
var a = [1,2,3];
a.length; //This will output 3
现在如果我给
a[100] = 100;
a.length; // The output is 101;
我想获取数组的确切大小,在上面的例子中应该是4。
这可能听起来是一个非常愚蠢的问题。在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
但需要注意以下几点:
因此,您需要过滤该结果:!(+el % 1)
,它可以检查 el
是否可以被视为数字属性,即使它是字符串类型。
+el>=0
+el < Math.pow(2,32)
因此,使用以下代码进行过滤,您将得到您的结果:
Array.realLength= Object.keys(a).filter(function(el){return !(+el % 1) && +el>=0 && +el < Math.pow(2,32) ;}).length
2^32-2
的属性也不被视为数组元素,但在那一点上这是非常理论性的;) - Felix Kling太长不看版本:我认为最简单可靠的方法是以下内容:
var count = a.filter(function() { return true; }).length;
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
undefined
。我们检查它是否不是 undefined,在这种情况下增加一些计数器,并从 0 -> 数组长度重复此过程 :) - Arkantos数组的大小正好是由长度属性所显示的。
即使您只给了前3个位置(0、1、2)一个值,当您将值100赋给a[100]时,它会重新调整大小为101个位置。因此,您将获得每个位置的计数,从0(第一个索引)到100(最后一个索引),即使它们没有值。
使用您的代码:a [100] = 100
,您正在创建一个块,位于数组中的位置100处(由于它从0开始,因此总共有101个)。
如果您想查看块中实际答案的数量,则必须使用循环并循环检查哪些字段不等于未定义。有许多方法可以使用for
、while
、foreach
等来完成这项工作。
只需实现一个计数器,并计算数组中不等于null
或undefined
的部分。这将为您提供实际在数组中使用的位置数。
undefined
。 - Rakesh_Kumar