как найти элемент с выбранным параметром и вывести его в javascript?

#javascript

Вопрос:

Я новичок в javascript и сталкиваюсь с такой проблемой.

Например. существует переменная со списком, подобным этому

 {
    name: 'x',
    attack: 50,
    speed: 100,
    hitpoint: 100,
},
{
    name: 'y',
    attack: 150,
    speed: 80,
    hitpoint: 180,
}
 

Найдите переменную с attack = 150 и верните ее в функции «findAMonsterByAttack»
Если в списке переменных нет соответствующей переменной, функция «findAMonsterByAttack» возвращает значение null.

Вот мой код :

 function findAMonsterByAttack(monsters) {
var monsters = [
{
    name: 'x',
    attack: 50,
    speed: 100,
    hitpoint: 100,
},
{
    name: 'y',
    attack: 150,
    speed: 80,
    hitpoint: 180,
},
// ...
];
var isfree = monsters.every(function(course, index) {
return course.attack ===150;
});
 

Моя идея заключается в использовании кода every для проверки курса и индекса, а затем возврата, если attach = 150. Но мне не удалось.
Не могли бы вы помочь мне в этом случае? Большое вам спасибо за ваше время.

Ответ №1:

Если monsters это массив, вы можете использовать array.filter, чтобы вернуть другой массив только monsters с критериями соответствия.

например attack === 150 .

Обратите внимание, что совпадений может быть несколько, поэтому это вернет массив со всеми monsters совпадениями (или пустой массив, если monsters совпадений нет).

 const monsters = [{
    name: 'x',
    attack: 50,
    speed: 100,
    hitpoint: 100,
  },
  {
    name: 'y',
    attack: 150,
    speed: 80,
    hitpoint: 180,
  },
  {
    name: 'z',
    attack: 150,
    speed: 90,
    hitpoint: 150,
  }
]

const a150 = monsters.filter(m => m.attack === 150)

console.log(a150) 

Если вас интересует только один monster , вы также можете использовать array.find . Но это вернет первое monster найденное, и undefined если совпадений не найдено.

 const monsters = [{
    name: 'x',
    attack: 50,
    speed: 100,
    hitpoint: 100,
  },
  {
    name: 'y',
    attack: 150,
    speed: 80,
    hitpoint: 180,
  },
  {
    name: 'z',
    attack: 150,
    speed: 90,
    hitpoint: 150,
  }
]

const a150 = monsters.find(m => m.attack === 150)

console.log(a150) 

Примечание: array.every проверяет, все monsters ли они соответствуют критериям, и возвращает Boolean значение. В вашем примере это вернется false , потому что у всех monsters нет значения атаки 150.

Ответ №2:

Это то, что вы хотите?

 function findAMonsterByAttack() {
var monsters = [
{
    name: 'x',
    attack: 50,
    speed: 100,
    hitpoint: 100,
},
{
    name: 'y',
    attack: 150,
    speed: 80,
    hitpoint: 180,
}
// ...
];

for ( m of monsters ) {
  if ( m.attack == 150 )
    return m
}
return "Monster with attack 150 not found"
}

console.log(findAMonsterByAttack())