2016-10-10 58 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,}計算元素,把它們添加到2個對象的數組

我想分割對象分成2個不同的對象,並把它放在一個數組,所以它看起來像

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

我嘗試過的if聲明,使這項工作,但事實並非如此。 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));

相同的邏輯,但有點更可讀的,在這裏檢查是否迭代值是catdog和插入到基於陣列條件

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

你會想創建2個獨立的對象,然後將它們合併到你的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

相關問題