这听起来是一个非常愚蠢的问题。我们如何在 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
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 中的基本操作。我们将探索多种方法来查找数组的长度。请参阅 WebDevLearners 了解更多详细信息。
方法1.使用length属性 查找数组长度最直接且最常用的方法是访问其 length 属性。此属性返回数组中的元素数量。
let myArray = [1, 2, 3, 4, 5];
let arrayLength = myArray.length;
// Output: 5
console.log("The length of the array is:", arrayLength);
方法 2. 使用 for 循环进行迭代 您可以使用循环遍历数组并对元素进行计数以找到长度。
let myArray = [1, 2, 3, 4, 5];
let count = 0;
for (let i = 0; i < myArray.length; i++) {
count++;
}
// Output: 5
console.log("The length of the array is:", count);
请参阅WebDevLearners了解更多详情。
你可以做 a.filter(Boolean).length