UUIDV4 для цикла без изменения значения - PullRequest
0 голосов
/ 31 мая 2019

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

Каждая игра будет основана на фиктивном объекте, который я импортирую в файл.

Функция ожидает вид спорта (строка), который будет присвоен ключу, и количество (число), которое будет определять итерации цикла.

При использовании цикла for UUID для идентификаторов вложенных объектов переопределяется на каждой итерации.

const mockGame = require('../mock-game');
const uuidv4 = require('uuid/v4');

function generateMockGames(sport, quantity) {
    let games = []

    for (let i = 0; i < quantity; i++) {
        let game = {}
        let id = uuidv4()

        game[id] = {
            search: mockGame.search,
            query: mockGame.query,
            variables: mockGame.variables,
        }

        game[id].search.eventId = id
        game[id].search.competition.categoryName = sport

        game[id].search.id = id
        game[id].search.competition.categoryName = sport;

        games.push(game);
    }

    return games;
}

const mockFootballGame = generateMockGames('football', 3);

Ожидаемый результат:

[
  {
    '286c1911-b155-4197-bbde-64dba0b304fe': {
       search: {
           eventId: '286c1911-b155-4197-bbde-64dba0b304fe',
           name: 'test name',
           competition: {
               categoryName: 'football'
           }
      },
      query: {
           id: '286c1911-b155-4197-bbde-64dba0b304fe',
           competition: {
               categoryName: 'football'
           }
      },
      variables: {
           name: 'test name'
      }
  },
  {
    '082a46a6-4dde-433d-8011-9e94a5ee79ff': {
       search: {
           eventId: '082a46a6-4dde-433d-8011-9e94a5ee79ff',
           name: 'test name',
           competition: {
               categoryName: 'football'
           }
      },
      query: {
           id: '082a46a6-4dde-433d-8011-9e94a5ee79ff',
           competition: {
               categoryName: 'football'
           }
      },
      variables: {
           name: 'test name'
      }
  },
  {
    'ba911751-3ea3-40ab-9bec-c525ab2a07b9': {
       search: {
           eventId: 'ba911751-3ea3-40ab-9bec-c525ab2a07b9',
           name: 'test name',
           competition: {
               categoryName: 'football'
           }
      },
      query: {
           id: 'ba911751-3ea3-40ab-9bec-c525ab2a07b9',
           competition: {
               categoryName: 'football'
           }
      },
      variables: {
           name: 'test name'
      }
  }
]

Вывод:

[
  {
    '286c1911-b155-4197-bbde-64dba0b304fe': {
       search: {
           eventId: 'ba911751-3ea3-40ab-9bec-c525ab2a07b9',
           name: 'test name',
           competition: {
               categoryName: 'football'
           }
      },
      query: {
           id: 'ba911751-3ea3-40ab-9bec-c525ab2a07b9',
           competition: {
               categoryName: 'football'
           }
      },
      variables: {
           name: 'test name'
      }
  },
  {
    '082a46a6-4dde-433d-8011-9e94a5ee79ff': {
       search: {
           eventId: 'ba911751-3ea3-40ab-9bec-c525ab2a07b9',
           name: 'test name',
           competition: {
               categoryName: 'football'
           }
      },
      query: {
           id: 'ba911751-3ea3-40ab-9bec-c525ab2a07b9',
           competition: {
               categoryName: 'football'
           }
      },
      variables: {
           name: 'test name'
      }
  },
  {
    'ba911751-3ea3-40ab-9bec-c525ab2a07b9': {
       search: {
           eventId: 'ba911751-3ea3-40ab-9bec-c525ab2a07b9',
           name: 'test name',
           competition: {
               categoryName: 'football'
           }
      },
      query: {
           id: 'ba911751-3ea3-40ab-9bec-c525ab2a07b9',
           competition: {
               categoryName: 'football'
           }
      },
      variables: {
           name: 'test name'
      }
  }
]

1 Ответ

1 голос
/ 31 мая 2019

Вы присваиваете субобъектам mockGame в цикле для записей, не копируя их. Таким образом, вы продолжаете перезаписывать mockGame.query.id и т. Д. Новым uuid в цикле, но затем присваиваете объект mockGame.query в целом для вывода.

...