2012-09-27 11 views
8

बस सोच रहा है, जब आप 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()); 

उत्तर

10

Array.prototype.reduce केवल चलना मौजूदा इंडेक्स के माध्यम से, तो आप कर सकते हैं:

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; 

" सभी इस सरणी सामान उबाऊ है! "ठीक है, Whadya इस के बारे में सोच !?

Object.keys(myArray2).length; 

"लेकिन ... लेकिन ... लेकिन ज़ीरक !!!! ! सभी ऐसा क्यों और के प्रयोजन अवहेलना: हम अमिश कर रहे हैं, हम अभी तक "डरें नहीं, Zirak यहाँ है ECMAScript 5 की जरूरत नहीं है

for (var length = 0, i = 0; i < myArray2.length; i++) { 
    if (i in myArray2) { 
     length += 1; 
    } 
} 

लेकिन इस तरह समय पर, एक आश्चर्य है सरणी, एक संरचित निर्माण, बजाय अपने उद्देश्य के लिए कुछ और फिट का उपयोग करने का?

+2

खैर, कि सुंदर है। –

+0

अच्छा लगा। बेशक, आप ' डी के लिए 'Array.prototype.reduce' के कार्यान्वयन की आवश्यकता है <9 –

+0

@TimDown Compen उस के लिए sated (और कुछ और।) – Zirak

2

for in का उपयोग करके सरणी के माध्यम से Iterate। jsfiddle

Array.prototype.trueLength= function(){ 
    var ctr = 0; 
    for(var i in this){ 
     if(this.hasOwnProperty(i)){ 
      ctr++; 
     } 
    } 
    return ctr;   
} 
console.log(myArray2.trueLength()); 
1

वैकल्पिक प्रोटोटाइप विधि:

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 
0

मैं प्रयोग करेंगे the in operator:

function getArrayPropertyCount(arr) { 
    var count = 0; 
    for (var i = 0, len = arr.length; i < len; ++i) { 
     if (i in arr) { 
      ++count; 
     } 
    } 
    return count; 
} 
0
function TrueArrayLength (myArray2) 
{ 
var TrueLength = 0;  
for (var i = 0; i < myArray2.length; i++) 
{ 
    if (i in myArray2) 
    { 
     TrueLength += 1; 
    } 
} 

return TrueLength; 
} 

इस समारोह का उपयोग करें और सही सरणी लंबाई मिलता है।

संबंधित मुद्दे

 संबंधित मुद्दे