首页 > 解决方案 > 对象作为未定义返回

问题描述

const loadObject = (selectedweapon) => {
//Loads up the weapon.json
const weaponspath = path.normalize('./damage_calculatons/../Mobs and Weapons/weapons.json') 
var file_content = fs.readFileSync(weaponspath);
var weaponjson = JSON.parse(file_content);
//Searches for each weapon
selectedweapon = selectedweapon.toLowerCase()
weaponjson.forEach(mctype => {
    mctype.weapon.forEach(category => {
        category.material.forEach(material => {
            if (material.weapon.toLowerCase() === selectedweapon){
                const {weapon, damage, attackspeed, sharpness, strength} = material;
                //Renames keys in object
                let weaponUsed = {
                    NAME : weapon,
                    ATK: damage,
                    ATKSPEED: attackspeed,
                    SHARP: sharpness,
                    STR: strength
                }
                return(weaponUsed)

            }
        })
    })
})}


const weaponUsed = loadObject('Gold Sword')
console.log(weaponUsed)

我正在尝试从 JSON 文件中获取一个数组,在数组中找到要查找的对象,使用不同的键克隆该对象,然后返回新的对象 WeaponUsed。它应该显示 object { NAME: 'Gold Sword', ATK: 4, ATKSPEED: 1.6, SHARP: 0, STR: 0 },但它却显示undefined。当我这样做时

if (material.weapon.toLowerCase() === selectedweapon){
                const {weapon, damage, attackspeed, sharpness, strength} = material;
                let weaponUsed = {
                    NAME : weapon,
                    ATK: damage,
                    ATKSPEED: attackspeed,
                    SHARP: sharpness,
                    STR: strength
                }
                console.log(weaponUsed)

            }
        })
    })
})}

它显示了对象{ NAME: 'Gold Sword', ATK: 4, ATKSPEED: 1.6, SHARP: 0, STR: 0 }

标签: javascriptnode.js

解决方案


尝试这样做

  const loadObject = (selectedweapon) => {
  //Loads up the weapon.json
  const weaponspath = path.normalize('./damage_calculatons/../Mobs and Weapons/weapons.json')
  var file_content = fs.readFileSync(weaponspath);
  var weaponjson = JSON.parse(file_content);
  //Searches for each weapon
  selectedweapon = selectedweapon.toLowerCase()
  let weaponUsed;
  weaponjson.forEach(mctype => {
    mctype.weapon.forEach(category => {
      category.material.forEach(material => {
        if (material.weapon.toLowerCase() === selectedweapon) {
          const { weapon, damage, attackspeed, sharpness, strength } = material;
          //Renames keys in object
          weaponUsed = {
            NAME: weapon,
            ATK: damage,
            ATKSPEED: attackspeed,
            SHARP: sharpness,
            STR: strength
          }

        }
      })
    })
  })
  return (weaponUsed)
}


const weaponUsed = loadObject('Gold Sword')
console.log(weaponUsed)

推荐阅读