Подсчет элементов в массиве, добавление их к 2 объектам в массиве

#javascript #arrays #object

#javascript #массивы #объект

Вопрос:

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

Итак, это дает мне {cat:2, dog:1, penguin:1, chicken: 2,}

Я хочу разделить объект на 2 разных объекта и поместить его в массив, чтобы он выглядел так

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

Я попробовал if инструкцию, чтобы заставить это работать, но это не так.
if (input[i]==='cat'||'dog') все еще дает мне тот же результат, что и раньше.

Какие-либо подсказки? Я неправильно использую оператор?

Комментарии:

1. if (input[i]==='cat'||'dog') всегда будет true .

Ответ №1:

Время игры в гольф, я полагаю

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

function orgAnimals(input) {
    return input.reduce((a, b) => {
    	var i = ['cat','dog'].indexOf(b) === -1 ? 1 : 0;
      	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') {
        	if ( input[i] in arr[0] ) {
            	arr[0][ input[i] ] = arr[0][ input[i] ]   1;
            } else {
            	arr[0][ input[i] ] = 1;
            }
        } else {
        	if ( input[i] in arr[1] ) {
            	arr[1][ input[i] ] = arr[1][ input[i] ]   1;
            } else {
            	arr[1][ input[i] ] = 1;
            }
        }
    }
    return arr;
}

console.log( orgAnimals(arr) )  

Ответ №2:

Вы хотели бы создать 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}