在JavaScript中计算绝对数组长度的最佳方法是什么?

在JavaScript中计算绝对数组长度的最佳方法是什么?,javascript,Javascript,只是想知道,当您使用array.length时,它会获取最后一个索引值并添加一个。如果您有一个数组,它是由于某种原因以这种方式定义的: var myArray2 =[]; myArray2[10]='x'; myArray2[55]='x'; 获取此数组的真实长度的绝对最佳方法是什么?返回2作为值的内容 我是这样想的,但不确定是否已经有了这样的方法,或者是否有更快的实现 Array.prototype.trueLength= function(){ for(va

只是想知道,当您使用
array.length
时,它会获取最后一个索引值并添加一个。如果您有一个数组,它是由于某种原因以这种方式定义的:

    var myArray2 =[];
    myArray2[10]='x';
    myArray2[55]='x';
获取此数组的真实长度的绝对最佳方法是什么?返回2作为值的内容

我是这样想的,但不确定是否已经有了这样的方法,或者是否有更快的实现

Array.prototype.trueLength= function(){
    for(var i = 0,ctr=0,len=myArray2.length;i<len;i++){
        if(myArray2[i]!=undefined){
            ctr++;
        }
    }
    return ctr;        
}
console.log(myArray2.trueLength());
Array.prototype.trueLength=function(){

for(var i=0,ctr=0,len=myArray2.length;i使用
for in
迭代数组


替代原型方法:

Array.prototype.trueLength= function(){
    var list= [], ctr = 0, array = this;

    for(var i in array) (function(arr) {

        if(array.hasOwnProperty(i)){
            list.push(arr);
            ctr++;
        };


    }(array[i]));

    return {length: ctr, "list": list}
}
样本:

var myArray2 =[];
    myArray2[10]='44';
    myArray2[55]='55';

// list not undefined 
myArray2.trueLength().list  // ["44", "55"]

// not undefined length list
myArray2.trueLength().length // 2
我会使用:

函数getArrayPropertyCount(arr){ var计数=0; 对于(变量i=0,len=arr.length;i
仅遍历现有索引,因此您可以执行以下操作:

var length = myArray2.reduce(function(sum) {
    return sum+1;
}, 0);
“但是齐拉克叔叔!
reduce
杀了我的父母!”别担心,年轻人,我们可以使用
Array.prototype.filter

var length = myArray2.filter(function(item, idx) {
    return idx in myArray2;
}).length;
“所有这些阵列的东西都很无聊!”好吧,你觉得怎么样

Object.keys(myArray2).length;
“但是……但是……但是Zirak!!!!我们是阿米什人,我们还没有ECMAScript 5!”不要害怕,Zirak在这里

for (var length = 0, i = 0; i < myArray2.length; i++) {
    if (i in myArray2) {
        length += 1;
    }
}
for(var-length=0,i=0;i
但在这种情况下,人们不禁要问:为什么所有这些都违背了数组(一种结构化构造)的目的,而不使用其他适合其目的的东西?

函数TrueArrayLength(myArray2)
function TrueArrayLength (myArray2)
{
var TrueLength = 0;    
for ( var i = 0; i < myArray2.length; i++) 
{
    if (i in myArray2) 
    {
        TrueLength += 1;
    }
}

return TrueLength;
}
{ var-TrueLength=0; 对于(var i=0;i

使用此函数并获得真实的数组长度。

Nice。当然,您需要为IE实现
array.prototype.reduce
9@TimDown补偿了这一点(还有更多)但是齐拉克叔叔,我还得和老艾一起工作。这意味着我是阿米什人吗?@TimDown仅仅因为所有的苹果都是水果,并不能让所有的水果都变成苹果。没错,有些水果也可以是柠檬!
for (var length = 0, i = 0; i < myArray2.length; i++) {
    if (i in myArray2) {
        length += 1;
    }
}
function TrueArrayLength (myArray2)
{
var TrueLength = 0;    
for ( var i = 0; i < myArray2.length; i++) 
{
    if (i in myArray2) 
    {
        TrueLength += 1;
    }
}

return TrueLength;
}