Javascript 从对象数组返回值时出现问题
我是js的新手(几周内),对我正在开发的增量游戏有疑问。我的问题是从我拥有的对象创建一个数组,然后获取该对象的属性,该属性在比较语句中使用,并在HTML中更新 我有以下称为升级的对象: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%",
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;a if(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);
}
}
}