2016-06-12 2 views
0

다음 코드에는 해당 특정 오브젝트 길이가 2 인 콘솔 로그 obj['mn']이 있습니다.이 코드의 문제점은 다 중계 배열을 만들고 첫 번째 배열 만 계산합니다. 총 4 개의 'mn'이 있으므로 결과는 4이어야합니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?배열 내의 특정 오브젝트의 길이 찾기

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']); 

답변

1

이 당신을 위해 무엇을 찾고있는 사람입니다 :

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)); 

이 재귀 구현입니다. 배열에 도착하면 재귀는 한 단계 더 깊어집니다.

+0

이것은 훌륭하지만 모든 객체와 객체의 길이를 반환하며, 내 질문에 따라 하나의 특정 객체 만 반환하면됩니다. – Nima

+0

'var lengths = count (arr, obj);'를 사용하고 원하는 것을 얻을 수 있습니다 :'console.log (lengths [ 'mn']);' –

+0

그게 다야! 감사! – Nima

-1

귀하는 분명히 원하지 않는 번호 인 obj[['ab','pq','mn','ab','mn','ab']]으로 전화를 걸고 있습니다.

깊이 우선 검색이 필요합니다.

arr[i]이 배열 인 경우 해당 배열을 반복해야합니다.