gpt4 book ai didi

javascript - for 循环中的键/值对出现问题 : Cannot read property 'achievement' of undefined\n

转载 作者:行者123 更新时间:2023-11-28 03:26:33 24 4
gpt4 key购买 nike

是否可以在 newAchievements.push 行之后的 for 循环 for (var key in AchievementObject) 中获取 newAchievements 的当前 key ?

例如,如果 AchievementObject 的键是“Finish level 1”,是否可以在同一 for 循环中的 newAchievements.push 行之后返回 newAchievements 的当前键(在本例中为 0)?

现在,我得到了这个 JavascriptException:

"StackTrace": "TypeError: Cannot read property 'achievement' of undefined\n    at handlers.UpdateAchievementsReadOnlyData (...-main.js:24:34)\n    at Object.invokeFunction (Script:116:33)"

我需要使用 server.UpdateUserReadOnlyData(MyRequest) 更新成就“Level1FinishTimes”的值;在我为下一个键/值对调用 ChooseanAchievement() 之前。

是否可以在for循环中获取newAchievements当前的key?如果不是,那么在我为下一个键/值对调用 ChooseanAchievement() 之前更新成就值的最佳方法是什么(使用 server.UpdateUserReadOnlyData(MyRequest);)?

handlers.UpdateAchievementsReadOnlyData = function (args, context)
{
var achievementObject = args.AchievementObject;
var achievementKeys = [];
var newAchievements = [];

for (var key in achievementObject)
{
achievementKeys.push(key);
};

log.info(achievementKeys);

var getUserReadOnlyDataResult = server.GetUserReadOnlyData({ PlayFabId: currentPlayerId, Keys: achievementKeys });

for (var key in achievementObject)
{
log.info("achievementObject[key]--->" + achievementObject[key]);
newAchievements.push(ChooseanAchievement(getUserReadOnlyDataResult, key, achievementObject[key]));

if (newAchievements[key].achievement != "")
{
log.info("newAchievements.achievement " + newAchievements[key].achievement, "newAchievements.addvalue " + newAchievements[key].addvalue);
var MyRequest = {
PlayFabId: currentPlayerId,
Data: {},
Permission: UserDataPermission.Public
};

MyRequest.Data[newAchievements[key].achievement] = newAchievements[key].addvalue;
server.UpdateUserReadOnlyData(MyRequest);

log.info("Updating achievement " + newAchievements[key].achievement + " was succuessful.");
}
else
{
log.info("Could not find this achievement.");
}
};

}

function ChooseanAchievement(result, achievementkey, achievementvalue)
{
switch (achievementkey)
{
case "Level1FinishTimes":
if (result.Data.hasOwnProperty(achievementkey))
{
if ((result.Data[achievementkey].Value != null) && (result.Data[achievementkey].Value != ""))
{
if (Number(achievementvalue) == 1)
{
log.info("Level1FinishTimes ok" + achievementkey + achievementvalue);
return { achievement: achievementkey, addvalue: Number(result.Data[achievementkey].Value) + Number(achievementvalue) };
}
else
{
log.info("Level1FinishTimes" + achievementkey + achievementvalue);
return { achievement: achievementkey, addvalue: result.Data[achievementkey].Value };
}
}
else
return { achievement: "", addvalue: false };
}
else
return { achievement: "", addvalue: false };
break;

case "Finish level 1 three times":
var resultdatalevel1finish = server.GetUserReadOnlyData({ PlayFabId: currentPlayerId, Keys: ["Level1FinishTimes"] });

if (resultdatalevel1finish.Data.hasOwnProperty("Level1FinishTimes"))
{
if ((resultdatalevel1finish.Data.Level1FinishTimes.Value != null) && (resultdatalevel1finish.Data.Level1FinishTimes.Value != ""))
{
if ((Number(resultdatalevel1finish.Data.Level1FinishTimes.Value) >= 3) && (achievementvalue == true))
{
log.info("Finish level 1 three times ok" + achievementkey + achievementvalue);
return { achievement: achievementkey, addvalue: achievementvalue };
}
else
{
log.info("Finish level 1 three times" + achievementkey + achievementvalue);
return { achievement: achievementkey, addvalue: result.Data[achievementkey].Value };
}
}
else
return { achievement: "", addvalue: false };
}
else
return { achievement: "", addvalue: false };
break;
//...
}
}

最佳答案

看来您误解了数组的术语keyindex。您正在将一个项目插入数组中。您需要使用 index 来获取数组的一项,例如fooData[0]:

const fooData = [
{'Finish level 0': 0, test1: 0},
{'Finish level 1': 1, test1: 1},
{'Finish level 2': 2, test1: 2},
];

fooData.push({'Finish level 3': 0, test1: 3});

// To get newly pushed item of array:
const maxIndex = fooData.length - 1;
console.log(`Newly pushed item of array:`, fooData[maxIndex]);

但是,您可以在数组中拥有一个key。您需要使用 key 来获取数组的一项,例如fooData['someKeyOfAnArray']:

const fooData = [
{'Finish level 0': 0, test1: 0},
{'Finish level 1': 1, test1: 1},
{'Finish level 2': 2, test1: 2},
];

// To get an object by key from an array
fooData['someKeyOfAnArray'] = {'message': 'This is a message'};
console.log(`// Object by key from an array: `, fooData['someKeyOfAnArray']);

关于javascript - for 循环中的键/值对出现问题 : Cannot read property 'achievement' of undefined\n,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58591503/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com