如何确定数组中已定义元素的数量?

时间:2009-02-03 17:04:54

标签: javascript

如果我在Javascript中有一个偶尔填充的数组,我该如何确定数组中非空元素的数量?

例如:

var zipCodes = [];
zipCodes[10006] = 'New York, NY';
zipCodes[90210] = 'Los Angeles, CA';

zipCodes.length在这里返回90,211我真的不想循环通过90,209个未知来找出我有两个有效元素。使用for-in循环意味着处理可能冒出原型链的任何事情,并试图弄清楚它是否是 this 数组的一部分。

有没有办法,鉴于上面定义的数组,我可以提取“2”作为已定义元素的数量?

2 个答案:

答案 0 :(得分:12)

你需要一个具有键值对的对象(有点像关联数组/哈希表)而不是数组:

var zipCodes = {};
zipCodes[10006] = 'New York, NY';
zipCodes[90210] = 'Los Angeles, CA';


for(var zipCode in zipCodes) {
    if(zipCodes.hasOwnProperty(zipCode)) {//makes sure prototypes aren't taken into account

    }
}

编辑: 或者您可以将对象存储在数组中,如下所示:

var zipCodes = [];
zipCodes.push({10006:'New York, NY'});
zipCodes.push({90210: 'Los Angeles, CA'});

// zipCodes.length = 2

答案 1 :(得分:0)

您还可以(取决于各种各样的当前未知数)填充第二个数组,该数组包含第一个数组中填充条目的索引(索引?)。

所以你可以有一个方法缩放整个数组一次,填充第二个数组:

var indexesNext = 0;
var indexes = new Array();
for(i = 0 ; i < zipCodes.length ; i++) 
     if(zipCodes[i] != null) indexes[indexesNext++] = i;

或者您可以在zipCodes数组上使用添加和删除访问器方法来更新索引数组,如果您希望它经常更改。

或者您可以在数组上使用Javascript sort()方法,并迭代它直到您点击一个空单元格。您可以使用它来优化以前的技术(YMMV对这种内置方法的效率,但FFX 3.1和Chrome中的新Javascript引擎肯定会做得很好,我敢肯定。)