Поиск объекта в массиве объектов - PullRequest
0 голосов
/ 02 мая 2019

У меня есть следующий массив:

const HEROES = [
{ id: 1, name: 'Captain America', squad: 'Avengers' },
{ id: 2, name: 'Iron Man', squad: 'Avengers' },
{ id: 3, name: 'Spiderman', squad: 'Avengers' },
{ id: 4, name: 'Superman', squad: 'Justice League' },
{ id: 5, name: 'Wonder Woman', squad: 'Justice League' },
{ id: 6, name: 'Aquaman', squad: 'Justice League' },
{ id: 7, name: 'Hulk', squad: 'Avengers' },
];

Я пытаюсь передать другой объект {id: 5, squad: 'Justice League'} в массив, чтобы найти соответствующий объект.

например:

findOne(HEROES, { id: 5, squad: 'Justice League' }) 

должно вернуться

{ id: 5, name: 'Wonder Woman', squad: 'Justice League' }

Я не уверен, как начать, любая помощь будет оценена.

Ответы [ 3 ]

3 голосов
/ 02 мая 2019

Использование find:

const HEROES = [
{ id: 1, name: 'Captain America', squad: 'Avengers' },
{ id: 2, name: 'Iron Man', squad: 'Avengers' },
{ id: 3, name: 'Spiderman', squad: 'Avengers' },
{ id: 4, name: 'Superman', squad: 'Justice League' },
{ id: 5, name: 'Wonder Woman', squad: 'Justice League' },
{ id: 6, name: 'Aquaman', squad: 'Justice League' },
{ id: 7, name: 'Hulk', squad: 'Avengers' },
];

const findOne = (arr, query) => {
  const { id, squad } = query;
  return arr.find(({ id: a, squad: b }) => (id != undefined ? a == id : true) && (b != undefined ? b == squad : true));
};

console.log(findOne(HEROES, { id: 5, squad: "Justice League" }));
0 голосов
/ 02 мая 2019

Аналогичный код с использованием find

const HEROES = [
{ id: 1, name: 'Captain America', squad: 'Avengers' },
{ id: 2, name: 'Iron Man', squad: 'Avengers' },
{ id: 3, name: 'Spiderman', squad: 'Avengers' },
{ id: 4, name: 'Superman', squad: 'Justice League' },
{ id: 5, name: 'Wonder Woman', squad: 'Justice League' },
{ id: 6, name: 'Aquaman', squad: 'Justice League' },
{ id: 7, name: 'Hulk', squad: 'Avengers' },
];

const findOne=(arr,obj)=>arr.find(x=>x.id==obj.id&&x.squad==obj.squad);

console.log(findOne(HEROES, { id: 7, squad: 'Avengers' }));
0 голосов
/ 02 мая 2019

Взгляните на служебную библиотеку, например, подчеркивание JS или Lodash . У них как раз такая функциональность для этого.

Из документации по lodash:

var users = [
  { 'user': 'barney',  'age': 36, 'active': true },
  { 'user': 'fred',    'age': 40, 'active': false },
  { 'user': 'pebbles', 'age': 1,  'active': true }
];

_.find(users, function(o) { return o.age < 40; });
// => object for 'barney'

// The `_.matches` iteratee shorthand.
_.find(users, { 'age': 1, 'active': true });
// => object for 'pebbles'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...