Как посчитать количество фруктов
Нужно вывести сколько раз строка повторяется в массиве, но обращаться напрямую к объекту нельзя. Вот что получилось у меня, сам массив я проверить могу но вывести как показано ниже не получается
const obj = {
viktor: ['apple', 'grape', 'orange', 'apple', 'banana'],
kate: ['grape', 'orange', 'apple', 'grape', 'banana'],
};
function calc() {
//Запрещено обращаться на прямую к obj.viktor или object.kate
//клонируем обьект
let cloneObj = Object.assign({}, obj);
//получаем значения массивов
const countArray = (obj) => Object.values(obj).reduce((currentValue, index) => ({ ...currentValue, [index]: (currentValue[index] || 0) + 1}), {});
//получаем значение ключей
const countKeys = (obj) => Object.keys(obj).reduce((currentValue, index, array) => ({ ...currentValue, [index]: ({})}), {});
console.log(countKeys(obj));
console.log(countArray(cloneObj.viktor));
}
calc();
Вот в таком виде должно выводится в консоль при вызове calc
// Вот такой должен быть результат
// {
// viktor: {
// apple: 2,
// grape: 1,
// orange: 1,
// banana: 1,
// },
// kate: {
// apple: 1,
// grape: 2,
// orange: 1,
// banana: 1,
// },
// }
Ответы (1 шт):
Автор решения: Grundy
→ Ссылка
Достаточно в качестве значения для ключа передавать не пустой объект
[index]: ({})
а результат вызова countArray
Например так:
const obj = {
viktor: ['apple', 'grape', 'orange', 'apple', 'banana'],
kate: ['grape', 'orange', 'apple', 'grape', 'banana'],
};
function calc(data) {
//получаем значения массивов
const countArray = (arr) => arr.reduce((acc, val) => ({ ...acc,
[val]: (acc[val] || 0) + 1
}), {});
//получаем значение ключей
const countKeys = (o) => Object.keys(o).reduce((acc, key) => ({ ...acc,
[key]: countArray(o[key])
}), {});
return countKeys(data);
}
console.log(calc(obj));