如何在普通JavaScript中动态创建嵌套对象

如何在普通JavaScript中动态创建嵌套对象,javascript,Javascript,我正在尝试创建一个如下所示的对象: { Player1: [ {cardName: "test", balanceNum: null, ability:""} ], Player2: [ {cardName: "test", balanceNum: null, ability:""} ], .

我正在尝试创建一个如下所示的对象:

{
   Player1: [
      {cardName: "test", 
       balanceNum: null,  
       ability:""}
   ],
   Player2: [
      {cardName: "test", 
       balanceNum: null,  
       ability:""}
   ],
   .
   .
   .
}
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: "", 
       balanceNum: null,  
       ability:""
    };
    
    // Also i don't see the utility of the other array
 }
目前,我正在尝试循环并动态地创建它。玩家通过循环获得更新,我希望每个新条目都从player1开始,然后继续播放

var playersInfoList = [];
var playerStatus = [];
var player = "";
var index = 1;
for (i = 0; i < playerCount; i++) {
   player = "player" + index++;
   playerStatus.push({
      cardName: "", 
      balanceNum: null,  
      ability:""
   });
   playersInfoList.push({
      [player]: playerStatus
   });
}
var playersinfo=[];
var playerStatus=[];
var player=“”;
var指数=1;
对于(i=0;i
让我直截了当地说:您希望数组包含多个属性,其中key=playerN和value是播放器的结构。对吧?

如果是这样,您不希望playerStatus是一个列表,而是一个对象(您仍然可以像使用数组一样迭代它的属性)。因此,您的代码如下所示:

{
   Player1: [
      {cardName: "test", 
       balanceNum: null,  
       ability:""}
   ],
   Player2: [
      {cardName: "test", 
       balanceNum: null,  
       ability:""}
   ],
   .
   .
   .
}
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: "", 
       balanceNum: null,  
       ability:""
    };
    
    // Also i don't see the utility of the other array
 }
const playerStatus=[];
var player=“”;
//正如在下面的评论中所说的,没有必要使用变量索引,因为我已经在递增并跟踪索引
对于(i=0;i

或者,我建议您使用key=playerN和value=ObjectPlayer的map,这两种方法基本相同,但您可以使用一些有用的内置函数。

不需要第二个数组


另外,键值数组在JS中也有一些不同。请查收


这会让你得到想要的输出;
const playerCount=15;//实例
var playerInfoList={};//后果
对于(i=0;i
其他解决方案正在使用:

playerCount=5;
const result=Array.from(Array(playerCount)).reduce((current,u,i)=>{
当前[`player${i+1}`]=[{
卡名:“,
balanceNum:null,
能力:“
}];
回流;

}, {} );什么不起作用?为什么你要跟踪
索引,而
for()
已经提供了一个索引?我只是复制并粘贴了他的代码,不要问我问题,因为OP向你展示了你给出的是“坏”建议?没有任何意义……我告诉他如何实现他的目标,但我想你是对的,我正在通过“复制并粘贴”他的代码进行清理。我的意思是,我复制并粘贴了答案上的代码,更改了他想更改的部分,这不是一个坏建议,仔细看看问题:)非常感谢,这就是我需要的!我刚刚在var键中的I中添加了+1,因此它从player1开始,而不是从player0开始