@AlexandraWeather

Нужно сгенерировать массив объектов и дать каждому уникальный id, как?

Мне по учебе нужно сгенерировать массив объектов с уникальными id от 1 до 25 и другими тоже уникальными номерами. Я не понимаю как в функции-конструкторе это сделать. Думала в сторону того, чтобы сгенерировать массив случайных чисел и оттуда их доставать по порядку. Но как это сделать именно с точки зрения конструктора я не знаю. Знают ли экземпляры такого объекта свой номер, например?
  • Вопрос задан
  • 270 просмотров
Пригласить эксперта
Ответы на вопрос 2
yarkov
@yarkov Куратор тега JavaScript
Помог ответ? Отметь решением.
Array
  .from({ length: 25 })
  .map((item, index) => ({ id: index + 1 }));

/** 
 * [
 *   {
 *       "id": 1
 *   },
 *   ...
 *   {
 *        "id": 25
 *    }
 * ] 
 */
Ответ написан
@Paul14
Конструктор не знает о номере экземпляра объекта, так как уникальные идентификаторы обычно генерируются и присваиваются во время создания объекта. Однако вы можете использовать класс для создания объектов с уникальными идентификаторами. Вот пример кода, который генерирует массив объектов, каждый из которых содержит уникальный идентификатор:

class MyObject {
  constructor(id, otherProperty) {
    this.id = id;
    this.otherProperty = otherProperty;
  }
}

function generateObjectsArray() {
  const objectsArray = [];

  for (let i = 1; i <= 25; i++) {
    const objectId = i; // Уникальный идентификатор объекта
    const otherProperty = "Другое свойство " + i; // Другое свойство объекта

    const newObj = new MyObject(objectId, otherProperty);
    objectsArray.push(newObj);
  }

  return objectsArray;
}

const myArray = generateObjectsArray();
console.log(myArray);


Здесь класс MyObject определяет объекты с двумя свойствами: id и otherProperty. В функции generateObjectsArray() мы создаем массив из 25 объектов, где каждый объект имеет уникальный идентификатор от 1 до 25. Вы можете заменить otherProperty на любое другое свойство или добавить сколько угодно свойств по своему усмотрению.

Переменная myArray будет содержать сгенерированный массив объектов с уникальными идентификаторами.

---------------------------

Если же вам все таки нужен пример функции для решения этой нетривиальной задачи, то:

const objectsArray = Array.from({ length: 25 })
  .map((_, index) => index + 1)
  .map(id => {
    const sum = [...Array(Math.floor(Math.random() * 10) + 1)].reduce((acc, _) => acc + Math.floor(Math.random() * 100) + 1, id);
    let emoji = '';
    if (sum % 2 === 0) {
      const emojis = ['', '', '', '', ''];
      emoji = emojis[Math.floor(Math.random() * emojis.length)];
    } else {
      const emojis = ['', '', '', '', ''];
      emoji = emojis[Math.floor(Math.random() * emojis.length)];
    }
    
    return { id, sum, emoji };
  });

console.log(objectsArray);

  1. Сначала мы снова используем метод Array.from() для создания массива из 25 элементов, но без передачи функции обратного вызова.
  2. Затем мы используем метод map() для преобразования индекса элемента в уникальный идентификатор id.
  3. Далее мы снова используем метод map(), чтобы каждый объект массива получил дополнительные свойства sum и emoji.
  4. Чтобы вычислить значение sum, мы создаем новый массив с случайной длиной от 1 до 10 элементов с помощью Array(Math.floor(Math.random() * 10) + 1), затем с помощью метода reduce() суммируем случайные числа от 1 до 100.
  5. Затем выбирается случайное эмодзи из массива эмодзи в зависимости от четности значения sum.
  6. Наконец, мы возвращаем объект с id, sum и emoji в каждой итерации.
  7. Полученный массив объектов objectsArray будет содержать 25 объектов, каждый из которых будет иметь уникальный идентификатор id, случайно сгенерированную сумму sum, а также случайно выбранное эмодзи emoji.


PS: если emoji не нужно, то можно удалить часть кода.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы