2016-10-10 2 views
0
var arr = ['cat','cat','dog','penguin','chicken','chicken'] 

function orgAnimals(input) 
    var obj = {}; 
    for (var i = 0 ; i < input.length; i++) { 
     obj[input[i]] = obj[input[i]] || 0; 
     obj[input[i]]++ 
    } 
return obj; 
} 

을 내이 객체에 추가하는 것은 그래서 나에게주는 {고양이 : 2 개 : 1, 펭귄 : 1, 닭고기 : 2,}계수 요소, 배열

내가 분할 할 내가 그 일을하기 위해 if 문을 시도했지만 그렇지 않은

[{cat:2, dog:1} {penguin:1, chicken:2 }] 

것 같습니다 있도록 2 개의 다른 객체로 객체 위로 배열에 넣어. if (input[i]==='cat'||'dog') 여전히 이전과 같은 출력을 제공합니다.

힌트가 있습니까? 연산자를 잘못 사용하고 있습니까?

+1

'if (input [i] === 'cat'|| 'dog')'는 항상 'true'가됩니다. – Xufox

답변

2

골프 시간, 나는

var arr = ['cat','cat','dog','penguin','chicken','chicken'] 
 

 
function orgAnimals(input) { 
 
    return input.reduce((a, b) => { 
 
    \t var i = ['cat','dog'].indexOf(b) === -1 ? 1 : 0; 
 
     \t return b in a[i] ? a[i][b]++ : a[i][b] = 1, a 
 
    }, [{},{}]); 
 
} 
 

 
console.log(orgAnimals(arr));

같은 논리를 생각하지만, 당신이 반복 값 중 하나를 cat 또는 dog 있는지 확인하고 기반 배열에 삽입 할 경우, 조금 더 읽기 조건

var arr = ['cat', 'cat', 'dog', 'penguin', 'chicken', 'chicken'] 
 

 
function orgAnimals(input) { 
 
    var arr = [{}, {}]; 
 
    
 
    for (var i = 0; i < input.length; i++) { 
 
    
 
     if (input[i] === 'dog' || input[i] === 'cat') { 
 
     \t if (input[i] in arr[0]) { 
 
      \t arr[0][ input[i] ] = arr[0][ input[i] ] + 1; 
 
      } else { 
 
      \t arr[0][ input[i] ] = 1; 
 
      } 
 
     } else { 
 
     \t if (input[i] in arr[1]) { 
 
      \t arr[1][ input[i] ] = arr[1][ input[i] ] + 1; 
 
      } else { 
 
      \t arr[1][ input[i] ] = 1; 
 
      } 
 
     } 
 
    } 
 
    return arr; 
 
} 
 

 
console.log(orgAnimals(arr))

0

두 개의 개별 개체를 만든 다음 return 문에 결합해야합니다. 그래서 이런 식으로 :

if ((input[i] == 'cat') || (input[i] == 'dog'))){ 
    obj1[input[i]] = obj1[input[i]] || 0; 
    obj1[input[i]]++ 
} 
else if ((input[i] == 'penguin') || (input[i] == 'chicken')){ 
    obj2[input[i]] = obj2[input[i]] || 0; 
    obj2[input[i]]++ 
} 
return {obj1, obj2} 
+0

나는 대답을 편집했다. – raphael75