2016-06-12 17 views
0

Im folgenden Code ein Konsolenprotokoll von obj['mn'] ist, die die Länge dieses spezifischen Objekt zurückgibt, das ist 2. Das Problem mit dem Code ist, dass es nicht die multidimentional zählt Array, und nur es zählt das erste Array. Das Ergebnis sollte 4 sein, weil es 4 'mn' insgesamt ist. Was mache ich falsch?die Länge eines bestimmten Objekts innerhalb eines Arrays

var arr = [['ab','pq','mn','ab','mn','ab'],'mn','mn']; 
var obj = { }; 
for (var i = 0, j = arr.length; i < j; i++) { 
    if (obj[arr[i]]) { 
     obj[arr[i]]++; 
    } 
} 
console.log(obj['mn']); 

Antwort

1

Dies ist, was Sie suchen:

var arr = [['ab','pq','mn','ab','mn','ab'],'mn','mn']; 
var obj = { }; 

function count(arr, obj) { 
    for (var i = 0, j = arr.length; i < j; i++) { 
     if (Array.isArray(arr[i])) { 
      count(arr[i], obj); 
     } 
     else if (typeof obj[arr[i]] !== 'undefined') { 
      obj[arr[i]]++; 
     } 
     else { 
      obj[arr[i]] = 1; 
     } 
    } 
    return obj; 
} 

console.log(count(arr, obj)); 

Dies ist eine rekursive Implementierung ist. Wenn es zu einem Array kommt, wird die Rekursion eine Ebene tiefer.

+0

Das ist toll, aber es gibt alle Objekte und deren Längen, ich brauche nur als pro meine Frage ein bestimmtes Objekt zurückzukehren. – Nima

+0

Sie können 'var Längen = count (arr, obj);' und dann die, erhalten Sie mögen: 'console.log (Längen [ 'mn']);' –

+0

Das ist es! Vielen Dank! – Nima

-1

Sie rufen obj[['ab','pq','mn','ab','mn','ab']], was offensichtlich nicht das ist, was Sie wollten.

Sie brauchen eine Tiefensuche.

Wenn arr[i] ein Array ist, dann müssen Sie eine Schleife durch das Array.

Verwandte Themen