繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM