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