[英]Find length of an array in jquery getting wrong result
我有类似下面的javascript代码来获取数组的大小,
var testvar = [ ]; testvar[1] = 2; testvar[200] = 3; alert(testvar.length); //201
但代码警告201
提到了大小2
,为什么?
我需要得到该数组中的总元素数。
如果你想真正找到数组的长度,尽管做了这样的事情:
alert(Object.keys(testvar).length);
https://jsfiddle.net/4Lqsf45a/
请注意,在IE <9中无法使用Object.keys()
。请参阅https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/keys了解变通方法
因为您使用testvar[200] = 3
在索引200处设置值。 length
属性将是数组的最后一个索引+ 1。
要获取元素的总数,可以使用以下示例:
function countElements(arr) {
var numElements = 0;
for ( var indx in arr ) {
numElements ++;
}
return numElements;
}
JavaScript允许稀疏数组,这意味着你可以拥有一个包含两个元素的数组,但是数组的长度与最后一个元素的索引挂钩,并通过在最后一个索引中加1来实现。 因此,如果您的最后一个索引是200,则为阵列报告的长度将为201。
有关详细信息,请参阅此SO问题 。
这应该得到正确数量的元素:
testvar.filter(function(value) { return value !== undefined }).length;
因为您无法以这种方式分配值。 你刚才做的是创建一个长度为200(包括0)的数组。
你可能应该使用一个对象代替你正在做的事情。
我相信你尝试做的只适用于PHP数组
length属性没有说明数组中定义值的数量。
要获得已定义项目的计数,您可以使用类似的内容
var count = array.filter(function(value) { return value !== undefined }).length
尝试这个
var testvar = [ ];
testvar[1] = 2;
testvar[200] = 3;
var size = testvar.filter(function(value) { return value !== undefined }).length;
console.log(size);
产量
2
你可以这样做,它的工作。
<script>
var testvar = new Object();
testvar["1"] = 2;
testvar["200"] = 3;
Object.size = function(obj) {
var size = 0, key;
for (key in obj) {
if (obj.hasOwnProperty(key)) size++;
}
return size;
};
// Get the size of an object
var size = Object.size(testvar);
alert(size);
</script>
因为要在索引200处添加一个项目,如果要查找所有未定义的值,可以使用以下内容来解析在数组中使用大量未定义的值进行填充:
var sum = testvar.reduce(function(sum) { return sum+1; }, 0); // 2
JavaScript不支持关联数组,但您可以使用对象:
var a = {};
a[1] = 1;
a[200] = 1;
// To get the length is a little tricky
var length = Object.keys(a).length; // 2
是的,先前的答案如何说。 Javascript数组基于null,并且每次都有一个从0开始的长度。
你想要存档什么? 只获得列表的长度?
为什么将3设置为200? 你的代码需要吗?
你能做的是:
var testvar = {'1': 2, '200': 3};
function length(arr) {
var c = 0;
for(prop in arr) {
if(typeof arr[prop]=='number')
c++;
}
return c;
}
length(testvar);
这给你正确的长度!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.