如何解决如何在原始JavaScript中动态创建嵌套对象
我正在尝试创建一个看起来像这样的对象:
{
Player1: [
{cardName: "test",balanceNum: null,ability:""}
],Player2: [
{cardName: "test",.
.
.
}
目前,我目前正在使用这种尝试进行循环并动态创建它。播放器通过循环获取更新,我希望每个新条目都从播放器1开始并继续播放器N。
var playersInfoList = [];
var playerStatus = [];
var player = "";
var index = 1;
for (i = 0; i < playerCount; i++) {
player = "player" + index++;
playerStatus.push({
cardName: "",ability:""
});
playersInfoList.push({
[player]: playerStatus
});
}
解决方法
不需要第二个数组。
此外,键值数组在JS中有所不同。请检查Best way to store a key=>value array in JavaScript?。
这应该为您提供所需的输出;
const playerCount = 15; // example
var playersInfoList = {}; // Result
for (i = 0; i < playerCount; i++) {
// Create key as 'player' + i
var key = "player" + i;
// Add new object
playersInfoList[key] = {
cardName: "",balanceNum: null,ability:""
};
}
console.log(playersInfoList); // Show result
,
其他解决方案正在使用Array.prototype.reduce():
playerCount = 5;
const result = Array.from(Array(playerCount)).reduce( (current,_,i) => {
current[`player${i+1}`] = [{
cardName: "",ability:""
}];
return current;
},{} );
,
让我明白这一点:您希望您的数组包含几个具有key = playerN的属性,并重视玩家的结构。对吧?
如果是这样,则不希望将playerStatus放到列表中,而是要放一个对象(您可以像处理数组一样继续迭代其属性)。所以你的代码变成这样:
const playerStatus = [];
var player = "";
// as said in the comments below there is no need to use the variale index as i is already incrementing and keeping track of index
for (i = 0; i < playerCount; i++) {
player = "player" + i;
playerStatus[player] =
{
cardName: "",ability:""
};
// Also i don't see the utility of the other array
}
或者,我建议您使用键= playerN和值= ObjectPlayer的地图,这几乎相同,但是您可以使用一些有用的内置函数。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。