如何创建将对象推入现有数组的函数?

时间:2020-01-03 23:45:58

标签: javascript arrays methods

我一直在尝试创建具有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' } 

如您所见,函数中的参数也会出现在输出中,而不是数组的属性名称中。先感谢您。

3 个答案:

答案 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)

这是因为要在要推送的对象中创建新属性,而不是将输入分配给现有属性。

您有两个选择:

  1. 明确设置属性:
const addPokemon = (pokedex, pokemonName, pokemonHp, pokemonType) => {
    pokedex.push({ name: pokemonName,
                   hp: pokemonHp, 
                   type: pokemonType});

} 
  1. 更改参数名称以匹配属性(减少键入):
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})
} 
相关问题