как создать массив с подобъектами другого массива в угловых - PullRequest
0 голосов
/ 11 сентября 2018

Привет, ребята, я действительно застрял здесь,

Я создаю базовую систему оценки комментариев, которая имеет функцию подкоммента

enter image description here

как вы видите в массиве комментариев> записи "подкомментариев" являются объектами, и я хочу создать массив с ними, но я не знаю как, потому что они находятся в массиве.

Я попробовал это:

    this.CommentsArray.forEach((item, i) => {


  if([item]["subcomments"] != undefined) {

     [item]["subcomments"].forEach((subitem, i) => {

        subitem = this.subCommentsArray[i];
    }) 



  }

но это не работает. какие-либо предложения?

спасибо ..

редактирование:

моя структура данных выглядит так:

"comments" : {
        "d4894e47181e43b7a0fb8b7699" : {
          "commentDate" : "2018-08-13T19:49:49.814Z",
          "commentPhotoExistence" : false,
          "commentRate" : "3",
          "commentRateState" : false,
          "commentTagState" : false,
          "commentText" : "",
          "commentUID" : "d4894e47181e43b7a0fb8b7699",
          "commenterUID" : "17QYQbhmyQeIYocIZBwH8R7ojhg1",
          "commenterUsername" : "Test2",
          "subcomments" : {
            "7c9f985d39334573b0211d18f1" : {
              "subcommentDate" : "2018-09-01T11:57:10.523Z",
              "subcommentText" : "EXAMPLE TEXT1",
              "subcommentUID" : "7c9f985d39334573b0211d18f1",
              "subcommenterUID" : "17QYQbhmyQeIYocIZBwH8R7ojhg1",
              "subcommenterUsername" : "Test2"
            },
            "a1197fb32eae483ba8e910a748" : {
              "subcommentDate" : "2018-09-01T11:29:57.514Z",
              "subcommentText" : "EXAMPLE TEST 2",
              "subcommentUID" : "a1197fb32eae483ba8e910a748",
              "subcommenterUID" : "17QYQbhmyQeIYocIZBwH8R7ojhg1",
              "subcommenterUsername" : "Test2"
            },
            "ad648a09a67c431c821bf8f290" : {
              "subcommentDate" : "2018-09-01T11:57:01.452Z",
              "subcommentText" : "example3",
              "subcommentUID" : "ad648a09a67c431c821bf8f290",
              "subcommenterUID" : "17QYQbhmyQeIYocIZBwH8R7ojhg1",
              "subcommenterUsername" : "Test2"
            },
            "f7682639d4584642a18a9a4ad7" : {
              "subcommentDate" : "2018-09-02T15:41:38.162Z",
              "subcommentText" : "example4",
              "subcommentUID" : "f7682639d4584642a18a9a4ad7",
              "subcommenterUID" : "17QYQbhmyQeIYocIZBwH8R7ojhg1",
              "subcommenterUsername" : "Test2"
            }
          }
        }

проблема в том, что идентификаторы подкомментов добавляются случайным образом. Обычно, если это был массив, я могу использовать .forEach для использования каждого элемента, но между подкомментами и свойствами подкомментов есть случайные идентификаторы. Так что все, что я хочу, это создать массив, как включая их, массив будет выглядеть так:

0: {                   "subcommentDate" : "2018-09-01T11:57:01.452Z",
                  "subcommentText" : "example3",
                  "subcommentUID" : "ad648a09a67c431c821bf8f290",
                  "subcommenterUID" : "17QYQbhmyQeIYocIZBwH8R7ojhg1",
                  "subcommenterUsername" : "Test2" 
}
1: {
                  "subcommentDate" : "2018-09-01T11:57:01.452Z",
                  "subcommentText" : "example3",
                  "subcommentUID" : "ad648a09a67c431c821bf8f290",
                  "subcommenterUID" : "17QYQbhmyQeIYocIZBwH8R7ojhg1",
                  "subcommenterUsername" : "Test2" 
}

2: {
                  "subcommentDate" : "2018-09-01T11:57:01.452Z",
                  "subcommentText" : "example3",
                  "subcommentUID" : "ad648a09a67c431c821bf8f290",
                  "subcommenterUID" : "17QYQbhmyQeIYocIZBwH8R7ojhg1",
                  "subcommenterUsername" : "Test2" 
}

и т.д.

1 Ответ

0 голосов
/ 11 сентября 2018

Ваш код скрывает переменную i.

Вы используете это в первой строке this.CommentsArray.forEach((item, i) => {, затем снова в subcomments.

this.CommentsArray.forEach((item, i) => {
  if([item]["subcomments"] != undefined) {
    [item]["subcomments"].forEach((subitem, z) => {
      subitem = this.subCommentsArray[z];
    }) 
  }
});

Но этоне настоящая проблема.Вы пытаетесь перебрать объект, а не массив.Результат будет возвращаться как:

{
  "d48...669": {
    "commentDate": '2019-08-13',
    "subcomments": {
      "7c9...8f1": {

      },
      "a11...748": {

      }
    }
  }
}

Вы должны выполнить итерации по ключам объекта;

Object.keys(this.CommentsArray).forEach(commentId => {
  const comment = this.CommentsArray[commentId];

  Object.keys(comment['subcomments']).forEach(subCommentId => {
    const subComment = comment['subcomments'][subCommentId];
  )};
});
...