Как вернуть массив обьектов, в котором содержится определенное свойство ключа

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, который до всех циклов был объявлен.

→ Ссылка
Автор решения: EzioMercer

Если нет свойств, у которых значение - это объект, то можно так однострочниками

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' } ]

Если же есть свойства, у которых значение - это объект, то просто рекурсивно запускаете алгоритм Алексея Шиманского

→ Ссылка