Как мне получить данные из объекта и создать массив объектов?

#javascript #json

Вопрос:

Как вы можете видеть, теперь у меня есть несколько объектов после преобразования этого в массив и наличия всех этих внутри массива, что я хочу сделать, это получить новый массив, который должен иметь имя капитана и все оценки с круглым числом в объекте, и все эти объекты должны быть сохранены таким образом в массиве. Представление о том, чего я хочу достичь, было бы примерно таким [{captain:'John Doe',RoundNumber:Score},{captain:'John Doe',RoundNumber:Score},{captain:'JohnDoe',RoundNumber:Score}]

это результат, которого я пытаюсь достичь, некоторая помощь или рекомендации были бы очень признательны, ниже приведены данные

     "-MXePKlz_DH8qqrIyesI" : {
      "game_name" : "test101",
      "players_info" : {
        "captain" : "john",
        "stage_name" : "fun fin fo",
        "team_members" : "John,Jane,jaden"
      },
      "response" : "this is one response",
      "round_num" : "1",
      "score" : "1"
    },
    "-MXePV53h9yol1UcLd8v" : {
      "game_name" : "test101",
      "players_info" : {
        "captain" : "Hamza",
        "stage_name" : "dssd",
        "team_members" : "01,02,03,05"
      },
      "response" : "another test response....!!!",
      "round_num" : "1",
      "score" : "0"
    },
    "-MXeiS_NOtxh3zSsG5sy" : {
      "game_name" : "mtest",
      "players_info" : {
        "captain" : "B",
        "stage_name" : "baj",
        "team_members" : "S"
      },
      "response" : "He is just gorgeous ",
      "round_num" : "1",
      "score" : "6"
    },
    "-MXeiTyNgMrIPKy2V_GG" : {
      "game_name" : "mtest",
      "players_info" : {
        "captain" : "Mo",
        "stage_name" : "fun fin fo",
        "team_members" : "Its Just Me and myself :)"
      },
      "response" : "Thats the same joke we had last week",
      "round_num" : "1",
      "score" : "4"
    },
    "-MXeiUGSqOvJdhHh64Vl" : {
      "game_name" : "mtest",
      "players_info" : {
        "captain" : "Schmed",
        "captain_email" : "SchmedtheEd@gmail.com",
        "stage_name" : "Schmed",
        "team_members" : "Schmed, Ed, Ted, Fred"
      },
      "response" : "Beard",
      "round_num" : "1",
      "score" : "2"
    }
  }```
 

Комментарии:

1. где ваш код?

2. это запутано, я пытался добиться этого с помощью вложенных циклов, которые не сработали, я могу вставить это в новый массив, но опять же есть много объектов с одинаковым именем капитана, разным индексом и другим круглым номером, так что даже если я перенесу это в новый массив, поэтому, когда одно и то же имя капитана появляется в другом индексе, как мне добавить круглое число и счет к этому предыдущему объекту. Я пробовал несколько решений, поэтому сейчас у меня нет ни одного надежного, так что это все, что я сейчас имею в виду.

3. @MuhammadHamza сработал ли для вас приведенный ниже ответ ?

4. нет, сэр, это не позволило мне объяснить один раз, чтобы вы могли лучше понять, допустим, у меня есть эти объекты, которые я разместил выше, поэтому у каждого объекта будет свой индекс, но не у всех будет другой капитан, поэтому я хочу создать новый массив, в котором теперь должны быть объекты, в каждом объекте он должен содержать имя капитана и оценки, собранные со всех других объектов, у которых одно и то же имя капитана, а затем то же самое для следующего, пока у меня не будет массива, содержащего каждый объект с именем капитана и все оценки из раунда, которые были у одного капитана, чтобы я мог отображать по имени капитана.

5. @MuhammadHamza Я обновил свой ответ, надеюсь, это то, что вы ищете?

Ответ №1:

Я бы сказал, сохраните свои данные в качестве объекта и сделайте следующее: Здесь у меня есть игрок: джон, указанный дважды с 2 баллами, первый 1 и второй 3. В результате Джон должен быть указан один раз с общим счетом 4.

 var myData = {
    "-MXePKlz_DH8qqrIyesI": {
      "game_name": "test101",
      "players_info" : {
        "captain" : "john",
        "stage_name" : "fun fin fo",
        "team_members" : "John,Jane,jaden"
      },
      "response" : "this is one response",
      "round_num" : "1",
      "score" : "1"
    },
  "-MXePKlz_DH8qqrIyes55": {
      "game_name": "test101",
      "players_info" : {
        "captain" : "john",
        "stage_name" : "fun fin fo",
        "team_members" : "John,Jane,jaden"
      },
      "response" : "this is one response",
      "round_num" : "1",
      "score" : "3"
    },
    "-MXePV53h9yol1UcLd8v" : {
      "game_name" : "test101",
      "players_info" : {
        "captain" : "Hamza",
        "stage_name" : "dssd",
        "team_members" : "01,02,03,05"
      },
      "response" : "another test response....!!!",
      "round_num" : "1",
      "score" : "0"
    },
    "-MXeiS_NOtxh3zSsG5sy" : {
      "game_name" : "mtest",
      "players_info" : {
        "captain" : "B",
        "stage_name" : "baj",
        "team_members" : "S"
      },
      "response" : "He is just gorgeous ",
      "round_num" : "1",
      "score" : "6"
    },
    "-MXeiTyNgMrIPKy2V_GG" : {
      "game_name" : "mtest",
      "players_info" : {
        "captain" : "Mo",
        "stage_name" : "fun fin fo",
        "team_members" : "Its Just Me and myself :)"
      },
      "response" : "Thats the same joke we had last week",
      "round_num" : "1",
      "score" : "4"
    },
    "-MXeiUGSqOvJdhHh64Vl" : {
      "game_name" : "mtest",
      "players_info" : {
        "captain" : "Schmed",
        "captain_email" : "SchmedtheEd@gmail.com",
        "stage_name" : "Schmed",
        "team_members" : "Schmed, Ed, Ted, Fred"
      },
      "response" : "Beard",
      "round_num" : "1",
      "score" : "2"
    }
}

var myNewArray = [];
for (const [key, value] of Object.entries(myData)) {

  let player = myNewArray.find( e => e.captain === value.players_info.captain );
    
  if (player) {
    player.RoundNumber = Number(player.RoundNumber)   Number(value.score);
  } else {
    myNewArray.push({
      captain: value.players_info.captain,
      RoundNumber: value.score
    });
  }
}

console.log(myNewArray); 

Комментарии:

1. Большое вам спасибо, сэр!

2. @MuhammadHamza не могли бы вы, пожалуйста, отметить его как правильный ответ, чтобы другие люди тоже могли его использовать ?