我有类似下面的javascript代码来获取数组的大小,
var testvar = [ ];
testvar[1] = 2;
testvar[200] = 3;
alert(testvar.length); //201

但代码警告201
需要获取尺寸2
,为什么?
我需要获取该数组中总元素的数量。
答案 0 :(得分:10)
如果你想真正找到数组的长度,尽管做了这些事情:
alert(Object.keys(testvar).length);
https://jsfiddle.net/4Lqsf45a/
请注意,在IE<中,Object.keys()
不可用。 9。
请参阅https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/keys了解解决方法
答案 1 :(得分:8)
因为您使用testvar[200] = 3
在索引200处设置了值。
length
属性将是数组的最后一个索引+ 1。
要获取元素的总数,可以使用以下代码:
function countElements(arr) {
var numElements = 0;
for ( var indx in arr ) {
numElements ++;
}
return numElements;
}
答案 2 :(得分:1)
这应该得到正确数量的元素:
testvar.filter(function(value) { return value !== undefined }).length;
答案 3 :(得分:0)
因为您无法以这种方式分配值。你刚刚做的是创建一个长度为200(包括0)的数组。
你可能应该使用一个对象代替你做的事情。
我相信你尝试做的只适用于PHP数组
答案 4 :(得分:0)
length属性没有说明数组中定义值的数量。
要获得已定义项目的计数,您可以使用类似这样的内容
var count = array.filter(function(value) { return value !== undefined }).length
答案 5 :(得分:0)
试试这个
var testvar = [ ];
testvar[1] = 2;
testvar[200] = 3;
var size = testvar.filter(function(value) { return value !== undefined }).length;
console.log(size);
输出
2
答案 6 :(得分:0)
你可以这样做,它的工作。
<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>
答案 7 :(得分:-1)
因为你要在索引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
答案 8 :(得分:-1)
是的,先前的答案如何说。 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);
这给你正确的长度!