Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/459.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在jquery中查找数组长度得到错误结果_Javascript_Arrays - Fatal编程技术网

Javascript 在jquery中查找数组长度得到错误结果

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

我有如下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 ) {
        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。很好的意大利面!