Как вернуть массив обьектов, в котором содержится определенное свойство ключа
function findUsersByName(users, name) {}
function findUsersByString(users, str) {}
const users = [
{
id: 101,
name: 'Denis',
city: 'Kyiv',
},
{
id: 102,
name: 'Alexandr',
city: 'Lviv',
}
]
console.log(findUsersByName(users, 'Denis')) // ===> [ { id: 101, name: 'Denis', city: 'Kyiv' }, { id: 106, name: 'Denis', city: 'Lviv' } ]
console.log(findUsersByString(users, 'Den')) // ===> [ { id: 101, name: 'Denis', city: 'Kyiv' }, { id: 106, name: 'Denis', city: 'Lviv' } ]
функция findUsersByName() должна возвращать массив обьектов если в нем есть свойство 'Denis' функция findUsersByString() должна возвращать массив обьектов если в нем есть часть свойство 'Den'
Ответы (2 шт):
Объявляем пустой массив (result)
Для обхода массива используется цикл: for..in, for..of, forEach, do-while, while-do
Для обхода свойств объекта можно использовать Object.values
Во втором цикле (Object.values) просто надо использовать
if. Если значение совпадает с указанным, то объект (элемент) из внешнего цикла заносится через методpushв массивresult, который до всех циклов был объявлен.
Если нет свойств, у которых значение - это объект, то можно так однострочниками
const users = [{
id: 101,
name: 'Denis',
city: 'Kyiv',
},
{
id: 102,
name: 'Alexandr',
city: 'Lviv',
},
{
id: 106,
name: 'Denis',
city: 'Lviv'
}
];
const findUsersByName = (users, name) => users.filter(user => Object.values(user).some(value => value === name));
const findUsersByString = (users, str) => users.filter(user => Object.values(user).some(value => ('' + value).indexOf(str) !== -1));
console.log(findUsersByName(users, 'Denis')) // ===> [ { id: 101, name: 'Denis', city: 'Kyiv' }, { id: 106, name: 'Denis', city: 'Lviv' } ]
console.log(findUsersByString(users, 'Den')) // ===> [ { id: 101, name: 'Denis', city: 'Kyiv' }, { id: 106, name: 'Denis', city: 'Lviv' } ]
Если же есть свойства, у которых значение - это объект, то просто рекурсивно запускаете алгоритм Алексея Шиманского