Javascript 从对象数组返回值时出现问题

Javascript 从对象数组返回值时出现问题,javascript,sorting,Javascript,Sorting,我是js的新手(几周内),对我正在开发的增量游戏有疑问。我的问题是从我拥有的对象创建一个数组,然后获取该对象的属性,该属性在比较语句中使用,并在HTML中更新 我有以下称为升级的对象: var UPGRADES = { newClothes: { name: "New Clothes", desc: "Give your bums a new look and some more motivation! \n Bum production bonus: 100%",

我是js的新手(几周内),对我正在开发的增量游戏有疑问。我的问题是从我拥有的对象创建一个数组,然后获取该对象的属性,该属性在比较语句中使用,并在HTML中更新

我有以下称为升级的对象:

var UPGRADES = {

newClothes: {
    name: "New Clothes",
    desc: "Give your bums a new look and some more motivation! \n Bum 
    production bonus: 100%",
    moneyCost: 1000,
    scienceCost: 10,
    requiredScience: 10,
    buildingAffected: BUILDINGS.bumBuilding,
    upgVal: 2,
    id: 'newClothes'
},   
//{upgrade 2}
//{upgrade 3 etc.}        
}
对于代码的一部分,我需要遍历升级的每个元素,返回“UPGRADES”中的第n个对象(newcosts作为索引0),然后调用(nth index.scienceCost)

到目前为止,我已经完成了以下工作:

var numBuildings = objectLength(BUILDINGS);
var numUpgrades = objectLength(UPGRADES);

function checkVisiblityOnUpgrades () {

var upgArray = [];
for (var a = 0; a < numUpgrades; a++) {
    upgArray[a] = Object.keys(UPGRADES)[a].toString();      
    console.log(UPGRADES.upgArray[a]);

    if (UPGRADES.upgArray[a].requiredScience <= resources.science) {
        var idString = upgArray[a].id.toString();
        getId(idString.concat("Button")).style.visibility = "visible";
        getId(idString.concat("MoneyCostDisp")).innerHTML = 
       numFormat(upgArray[a].moneyCost);
        getId(idString.concat("ScienceCostDisp")).innerHTML = 
        numFormat(upgArray[a].scienceCost);
        }
    }
}
我想知道我将如何真正去获取我想要的对象的值。我正在
checkVisibilityOnUpgrades()
中创建一个数组,这样我就可以用for循环迭代每次升级


我的另一个问题是:如果我要存储100多个升级实例,是否最好将
升级
切换到一个数组而不是它自己的对象?这样,我可以更容易地获取值。

您可以使用Object大大简化初始逻辑。条目:

Object.entries(UPGRADES).forEach(({ key, thisUpgradeObject }) => {
  // `key` references the outer property, eg., 'newClothes'
  // `thisUpgradeObject` references the inner object
});
所以

Object.entries(upgArray).forEach({key,obj})=>{
常数{
需要科学,
身份证件
货币成本,
科学成本,
}=obj;
if(requiredScience
我在这里看到了问题: 创建一个名为
upgArray
的数组,然后尝试访问未定义的
UPGRADES.upgArray
。您想在那里编写的内容可能是升级[upgArray[a]

function checkVisiblityOnUpgrades () {

var upgArray = Object.keys(UPGRADES);
for (var a = 0; a < numUpgrades; a++) {

    if (UPGRADES[upgArray[a]].requiredScience <= resources.science) {
        var idString = UPGRADES[upgArray[a]].id.toString();
        getId(idString.concat("Button")).style.visibility = "visible";
        getId(idString.concat("MoneyCostDisp")).innerHTML = 
       numFormat(UPGRADES[upgArray[a]].moneyCost);
        getId(idString.concat("ScienceCostDisp")).innerHTML = 
        numFormat(UPGRADES[upgArray[a]].scienceCost);
        }
    }
}
函数检查VisiblityOnUpgrades(){
var upgArray=Object.key(升级);
对于(var a=0;aif(UPGRADES[upgArray[a]].requiredScience哪一行是game.js:268?你的想法会有问题,因为你不能保证对象的第n项是一致的。对象没有有序元素。js:268是
console.log(UPGRADES.upgArray[a]);
得到一个解析错误:关于
{key,obj}中的逗号的意外标记
;您知道这方面的情况吗?抱歉,键入错误。请改用
对象。条目(升级)
,因为
升级
是所有对象所在的位置
Object.entries(upgArray).forEach(({ key, obj }) => {
  const {
    requiredScience,
    id,
    moneyCost,
    scienceCost,
  } = obj;
  if (requiredScience < resources.science) return;
  const idString = id.toString();
  getId(idString.concat("Button")).style.visibility = "visible";
  getId(idString.concat("MoneyCostDisp")).innerHTML = numFormat(moneyCost);
  getId(idString.concat("ScienceCostDisp")).innerHTML = numFormat(scienceCost);
});
function checkVisiblityOnUpgrades () {

var upgArray = Object.keys(UPGRADES);
for (var a = 0; a < numUpgrades; a++) {

    if (UPGRADES[upgArray[a]].requiredScience <= resources.science) {
        var idString = UPGRADES[upgArray[a]].id.toString();
        getId(idString.concat("Button")).style.visibility = "visible";
        getId(idString.concat("MoneyCostDisp")).innerHTML = 
       numFormat(UPGRADES[upgArray[a]].moneyCost);
        getId(idString.concat("ScienceCostDisp")).innerHTML = 
        numFormat(UPGRADES[upgArray[a]].scienceCost);
        }
    }
}