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

时间:2015-04-29 11:43:14

标签: javascript arrays

我有类似下面的javascript代码来获取数组的大小,



var testvar = [  ];
testvar[1] = 2;
testvar[200] = 3;
alert(testvar.length);    //201




Fiddle demo

但代码警告201需要获取尺寸2,为什么?

我需要获取该数组中总元素的数量。

9 个答案:

答案 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数组

enter image description here

答案 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);

这给你正确的长度!