Javascript 在jquery中查找数组长度得到错误结果
我有如下javascript代码来获取数组的大小Javascript 在jquery中查找数组长度得到错误结果,javascript,arrays,Javascript,Arrays,我有如下javascript代码来获取数组的大小 var testvar=[]; testvar[1]=2; testvar[200]=3; 警报(testvar.length)//201因为您正在使用testvar[200]=3在索引200处设置一个值。 length属性将是数组+1的最后一个索引 要获取元素总数,可以使用以下示例: function countElements(arr) { var numElements = 0; for ( var indx in arr
var testvar=[];
testvar[1]=2;
testvar[200]=3;
警报(testvar.length)//201
因为您正在使用testvar[200]=3在索引200处设置一个值。
length
属性将是数组+1的最后一个索引
要获取元素总数,可以使用以下示例:
function countElements(arr) {
var numElements = 0;
for ( var indx in arr ) {
numElements ++;
}
return numElements;
}
因为不能以这种方式赋值。您刚才所做的是创建一个长度为200(包括0)的数组
你可能应该用一个对象来代替你正在做的事情
我相信您尝试的操作只在PHP数组中有效
因为您要在索引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允许稀疏数组,这意味着您可以拥有一个包含两个元素的数组,但数组的长度与最后一个元素的索引挂钩,并通过向最后一个索引添加1来实现。因此,如果上一个索引是200,那么为数组报告的长度将是201
有关更多详细信息,请参阅。这应获得正确的元素数:
testvar.filter(function(value) { return value !== undefined }).length;
如果您想在执行以下操作的情况下真正找到数组的长度:
alert(Object.keys(testvar).length);
请注意,Object.keys()
在IE<9中不可用。
有关解决方法,请参见
length属性没有说明数组中定义值的数量
要获得已定义项的计数,可以使用如下内容
var count=array.filter(函数(值){return value!==undefined})。长度
试试这个
var testvar = [ ];
testvar[1] = 2;
testvar[200] = 3;
var size = testvar.filter(function(value) { return value !== undefined }).length;
console.log(size);
输出
2
是的,前面的回答是这样说的。Javascript数组是基于空的,它们的长度每次从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);
这将为您提供正确的长度 你可以这样做,这很有效
<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>
var testvar=新对象();
testvar[“1”]=2;
testvar[“200”]=3;
Object.size=函数(obj){
变量大小=0,键;
用于(输入obj){
if(obj.hasOwnProperty(key))size++;
}
返回大小;
};
//获取对象的大小
var size=Object.size(testvar);
警报(大小);
我需要获取该数组中的元素总数。有可能吗?@Shijin上面的代码可以帮你做到这一点。它返回数组中的元素数这是一种可怕的解决方法。尝试testvar[100000000]=5代码>并观察浏览器在使用功能时冻结<代码>Object.keys(testvar).length代码>是正确的选择。如果数组是:arr[1],arr[200],arr['a211',isNaN是毫无意义的错误,不是吗?@devqon取消了否决票。但仍然看不到函数的意义。length属性没有说明数组中已定义值的数量。您可以按照下面的链接操作数组的可能副本。length值只需将1添加到最后一个索引即可计算长度。这就是得到201而不是2的原因,它既没有给出数组的长度(即testvar.length
),也没有给出数组中的元素数testvar.x=1
不会更改数组中的元素数,但会更改解决方案报告的值。@zeroplagl但会回答op的问题。请注意Enjoyed所说的“查找数组长度”Object.keys与IE的兼容性问题。IE支持始于IE9。很好的意大利面!