помогите решить задачу с использованием РЕКУРСИИ
Реализуйте (с использованием рекурсии) функцию getStringCount, которая должна принимать массив или объект и считать количество строк в массиве / значениях объекта с учетом вложенности.
function getStringCount(object) {
//code here
}
getStringCount
({
first: '1',
second: '2',
third: false,
fourth: ['anytime', 2, 3, 4 ],
fifth: null,
}); // 3
getStringCount
(['1', '2', ['3']]) // 3
решил без рекурсии
let arr = {
first: "1",
second: "2",
third: false,
fourth: ["anytime", 2, 3, 4],
fifth: null,
};
let arr2 = ["1", "2", ["3"]];
function getStringCount(object) {
let res = Object.values(object).flat();
res = res.filter(function (item) {
return typeof item === "string";
});
console.log(res.length);
}
getStringCount(arr);
getStringCount(arr2);
Ответы (2 шт):
Автор решения: RazDva
→ Ссылка
function getStringCount(object, acc = { result: 0 }) {
// Получаем все значения из объекта
const values = Object.values(object);
for (let i = 0; i < values.length; i += 1) {
// Если элемент строка прибавляем в результат 1
if (typeof values[i] === 'string') {
acc.result += 1;
// Если элемент объект и не null
} else if (typeof values[i] === 'object' && values[i] !== null) {
// Рекурсивно вызываем функцию передавая туда объект который нашли и аккумулятор где содержится счетчик
getStringCount(values[i], acc);
}
}
return acc.result;
}
Автор решения: Grundy
→ Ссылка
Задачу можно разделить на несколько шагов:
- если объект строка - возвращаем 1.
- если объект имеет falsy значение - возвращаем 0
- берем все свойства объекта и для каждого из них считаем количество строк, результат суммируем
Например:
function getStringCount(object) {
if (typeof object == 'string') return 1;
if (!object) return 0;
return Object.values(object).reduce((acc, cur) => acc + getStringCount(cur), 0);
}
console.log(getStringCount({
first: '1',
second: '',
third: false,
fourth: ['anytime', 2, 3, 4],
fifth: null,
})); // 3
console.log(getStringCount(['1', '2', ['3']])); // 3