JS数组“长度”与非连续索引/键

时间:2016-08-10 17:47:06

标签: javascript

如何获取非连续数字作为键的数组中的元素数量?

var array = [];  
array[5] = "something";  
array[10] = "nothing":  

预期:
array = 2

中的元素数量

实际
相反,我得到最后一个用作“长度”的数字,11

我可以通过迭代每个元素找出完成此操作的方法。有更好的方法吗?

4 个答案:

答案 0 :(得分:2)

您可以计算非空单元格:

array.filter(function(e){return e!==undefined}).length

答案 1 :(得分:0)

听起来你真正想要的是字典,而不是数组。您是否认为这是一种替代数据结构?

How to do associative array/hashing in JavaScript

var myArray = {};
myArray["5"] = "something";
myArray["10"] = "nothing";

要获得长度,你需要编写一个快速函数,如下所示:

Length of a JavaScript object

Object.size = function(obj) {
    var size = 0, key;
    for (key in obj) {
        if (obj.hasOwnProperty(key)) size++;
    }
    return size;
};

var size = Object.size(myArray);

或者,甚至更简单(但IE8不支持):

Object.keys(myArray).length

答案 2 :(得分:0)

var array = [];  
array[5] = "something";  
array[10] = "nothing": 

在这种情况下你的数组变为:

[undefined,undefined,undefined,undefined,undefined,"something",undefined,undefined,undefined,undefined,"nothing"]

这就是为什么长度为11.因此理想情况下你不应该像数组[5]或数组[10]那样设置它。

如果你有变量键,那么你应该使用对象

a = {};    
a["5"] = "something";
a["10"] = "nothing"

然后a会看起来像{"5":"something","10":"nothing"}

然后你可以把计数计算为:

var elemCount = 0;
for(var key in a){
elemCount++;
}

<强>输出:

elemCount = 2

获取对象中密钥长度的各种其他方法: How to efficiently count the number of keys/properties of an object in JavaScript?

答案 3 :(得分:-1)

var array= Array(5);
array[1] = 10;
array[3] = 3;

numberOfElements = 0;

for(var i  =0; i<array.length; i++) {
	if(array[i]!=undefined)
		numberOfElements++;
}
alert(numberOfElements);