2016-10-10 50 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

相关问题