javascript - 为什么我的对象键值对被覆盖而不是创建新的键值对?
问题描述
我正在尝试使用动态创建的键值对在对象中创建对象对象,但嵌套对象不断覆盖键值对而不是创建新的键值对。
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);
推荐阅读
- php - 如何将 Laravel 与 Nuxt js 集成
- caching - 单击时缓存整个 PWA
- electron - Windows Defender SmartScreen 和电子应用程序
- react-native - 反应原生 rn_bottom_drawer 的动态高度
- azure - Azure 租户中所有站点的列表
- javascript - Operating on one of the objects in the array based on a field
- elasticsearch - 使用过滤器的 constant_score 和 bool 查询之间是否存在性能差异?
- laravel - Laravel Eloquent:是否可以使用“创建”方法将多条记录作为数组插入?
- vercel - 如何在没有`build`和`public`的情况下部署到Now 2?
- javascript - TABULAOTR, Total calculation of table is not downloading