如何获取非连续数字作为键的数组中的元素数量?
var array = [];
array[5] = "something";
array[10] = "nothing":
预期:
array = 2
实际
相反,我得到最后一个用作“长度”的数字,11
我可以通过迭代每个元素找出完成此操作的方法。有更好的方法吗?
答案 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";
要获得长度,你需要编写一个快速函数,如下所示:
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);