在 Javascript 中查找数组长度

问题描述 投票:0回答:6

这听起来是一个非常愚蠢的问题。我们如何在 JavaScript 中找到数组的精确长度;更准确地说,我想找到数组中占据的总位置。

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

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

现在如果我给

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

我想获得数组的确切大小,在上面的情况下应该是 4。

javascript arrays
6个回答
25
投票

您要查找的不是数组的长度,而是该数组中分配的数值。

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。我认为这不是你想要的。 因此,您必须过滤该结果:

!(+el % 1)
,检查
el
是否可以被视为数字属性,即使它具有字符串类型。

  • 您只想计算正整数,因此您必须使用以下方法过滤它们:

+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 

5
投票

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


0
投票

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

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


0
投票

使用您的代码:

a[100] = 100
,您将在数组中的位置 100 处创建一个块。 (从 0 开始总共 101)。

如果您想查看块中有多少实际答案,则必须使用循环并循环检查哪些字段不等于未定义。有数十种方法可以使用

for
while
foreach
等来实现此目的。

只需实现一个计数器并计算数组中不等于

null
undefined
的部分。这将为您提供数组中实际使用的位置数。


0
投票

确定数组的长度是 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了解更多详情。


0
投票

你可以做 a.filter(Boolean).length

© www.soinside.com 2019 - 2024. All rights reserved.