我一直在尝试创建具有4个参数的函数,该函数允许我将对象推入现有数组中。但是,我没有得到想要的结果。例如,这是现有的数组:
const firstGen = [
{name: 'Mewtwo', hp: 110, type: 'physic'},
{name: 'Charizard', hp: 135, type: 'flying'},
{name: 'Pikachu', hp: 85, type: 'electric'},
{name: 'Totodile', hp: 55, type: 'water'},
{name: 'Bayleef', hp: 80, type: 'grass'},
{name: 'Typlosion', hp: 125, type: 'fire'}
]
这是我创建的功能:
const addPokemon = (pokedex, pokemonName, pokemonHp, pokemonType) => {
pokedex.push({pokemonName,pokemonHp, pokemonType})
}
示例输入:
addPokemon(secondGen, 'Lucario', 85, 'fighting')
但是输出是:
{ name: 'Mew', hp: 110, type: 'physic' },
{ name: 'Arcanine', hp: 135, type: 'Fire' },
{ name: 'Raikou', hp: 140, type: 'electric' },
{ name: 'Blastoise', hp: 120, type: 'water' },
{ name: 'Gardevoir', hp: 100, type: 'grass' },
{ name: 'Scorbunny', hp: 45, type: 'fire' },
{ pokemonName: 'Lucario', pokemonHp: 85, pokemonType: 'fighting' }
如您所见,函数中的参数也会出现在输出中,而不是数组的属性名称中。先感谢您。
答案 0 :(得分:2)
所以,这部分代码
pokedex.push({pokemonName,pokemonHp, pokemonType})
实际上是
的简写pokedex.push({pokemonName: pokemonName,pokemonHp: pokemonHp, pokemonType: pokemonType})
当变量名称和属性具有相同的名称时,使用此表示法。在您的情况下,您需要执行以下操作手动指定属性:
pokedex.push({name: pokemonName, hp: pokemonHp, type: pokemonType})
或将参数更改为:
const addPokemon = (pokedex, name, hp, type) => {
pokedex.push({name, hp, type})
}
答案 1 :(得分:2)
您使用的是ES6对象的简写,其中{ foo }
是{ foo: foo }
的缩写。所以对象字面量
{pokemonName,pokemonHp, pokemonType}
等同于
{pokemonName: pokemonName, pokemonHp: pokemonHp, pokemonType: pokemonType}
您需要使用您真正想要的属性名称。
pokedex.push({name: pokemonName, hp:pokemonHp, type: pokemonType})
或者您可以更改函数参数的名称以匹配属性。
const addPokemon = (pokedex, name, hp, type) => {
pokedex.push({name, hp, type})
}
答案 2 :(得分:0)
这是因为要在要推送的对象中创建新属性,而不是将输入分配给现有属性。
您有两个选择:
const addPokemon = (pokedex, pokemonName, pokemonHp, pokemonType) => {
pokedex.push({ name: pokemonName,
hp: pokemonHp,
type: pokemonType});
}
const addPokemon = (pokedex, name, hp, type) => {
pokedex.push({ name, hp, type});
}
这等同于:
const addPokemon = (pokedex, name, hp, type) => {
pokedex.push({name: name, hp: hp, type: type})
}