Почему мой ключ объекта, пара значений переопределяется вместо создания нового ключа, пары значений? - PullRequest
0 голосов
/ 22 декабря 2018

Я пытаюсь создать объект объектов внутри объекта с динамически создаваемым паром ключ-значение, но вложенный объект продолжает переопределять пару ключ-значение вместо создания новой пары ключ-значение.

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"}

Ответы [ 2 ]

0 голосов
/ 22 декабря 2018

Удалите эти две строки из внутреннего цикла и переместите его наружу из внутреннего цикла,

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

Это должно сработать

0 голосов
/ 22 декабря 2018

Вы должны инициализировать

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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...