javascript - 为什么我的对象键、值对被覆盖而不是创建新的键、值对?

标签 javascript arrays object

我正在尝试使用动态创建的键值对在对象内创建对象的对象,但嵌套对象不断覆盖键值对而不是创建新的键值对。

ObjectIDWithQuestions = {};
var ArrayOfBlocks1 = [
  {
    ID: "block1",
    block: "block1",
    BlockElements: [
      { QuestionID: "1"  },
      { QuestionID: "2"  }
    ]
  },
  {
    ID: "block2",
    block: "block2",
    BlockElements: [
      {  QuestionID: "1"  },
      {  QuestionID: "2"  }
    ]
  },
  {
    ID: "block3",
    block: "block3",
    BlockElements: [
      {  QuestionID: "1"  },
      {  QuestionID: "2"  }
    ]
      }
];

for(i=0;i<ArrayOfBlocks1.length;i++){
    for(k=0;k<ArrayOfBlocks1[i].BlockElements.length;k++){
        var ArrayOfBlocks2 = ArrayOfBlocks1[i].ID
        ObjectIDWithQuestions[ArrayOfBlocks2]={}
        ObjectIDWithQuestions[""+ArrayOfBlocks2]["questions"+ k]=ArrayOfBlocks1[i].BlockElements[k].QuestionID

    }
}
console.log(ObjectIDWithQuestions);

代码的预期结果是创建一个对象,该对象是具有两个动态创建的键、值对而不是被覆盖的一个键、值对的对象的对象。例如,以下代码打印:

block1: {questions1: "2"}
block2: {questions1: "2"}
block3: {questions1: "2"}

何时打印

block1: {questions0: "1",questions1:"2"}
block2: {questions0: "1",questions1:"2"}
block3: {questions0: "1",questions1:"2"}

最佳答案

您应该初始化

var ArrayOfBlocks2 = ArrayOfBlocks1[i].ID
ObjectIDWithQuestions[ArrayOfBlocks2]={}

在内循环之外。否则每次内循环迭代时都会创建一个对象

ObjectIDWithQuestions = {};
var ArrayOfBlocks1 = [
  {
    ID: "block1",
    block: "block1",
    BlockElements: [
      { QuestionID: "1"  },
      { QuestionID: "2"  }
    ]
  },
  {
    ID: "block2",
    block: "block2",
    BlockElements: [
      {  QuestionID: "1"  },
      {  QuestionID: "2"  }
    ]
  },
  {
    ID: "block3",
    block: "block3",
    BlockElements: [
      {  QuestionID: "1"  },
      {  QuestionID: "2"  }
    ]
      }
];

for(i=0;i<ArrayOfBlocks1.length;i++){
     var ArrayOfBlocks2 = ArrayOfBlocks1[i].ID
     ObjectIDWithQuestions[ArrayOfBlocks2]={}
     for(k=0;k<ArrayOfBlocks1[i].BlockElements.length;k++){  
        ObjectIDWithQuestions[""+ArrayOfBlocks2]["questions"+ k]=ArrayOfBlocks1[i].BlockElements[k].QuestionID

     }
}
console.log(ObjectIDWithQuestions);

关于javascript - 为什么我的对象键、值对被覆盖而不是创建新的键、值对?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53897889/

相关文章:

javascript - 在后台服务中发送地理定位[钛]

javascript - 对象初始值设定项 this 与实例名称

Javascript 正则表达式相当于 PHP 正则表达式

php - 计算数组中key的值

javascript - 为什么我的功能没有被限制?

c - 如何在 C 中创建字符串数组?

python - 用另一个包含数组的列表索引一个列表

oop - 术语 "Namespace"的澄清

Java - 如何使用 for each 循环检查对象列表中某个值的不同出现次数

JavaScript 访问父对象属性