#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())