我正在尝试使用动态创建的键值对在对象内创建对象的对象,但嵌套对象不断覆盖键值对而不是创建新的键值对。
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/