Невозможно добавить свойство в массив объектов в цикле

Ладно, ребята, я тут совсем запутался. Небольшой обзор того, что я здесь делаю, я извлекаю документы из MongoDB с помощью Mongoose. Вот пример массива объектов, возвращаемых запросом мангуста:

[
  {
    "_id": "5fdd2f26724b95367bb08557",
    "buyer": "5f976504231cd73151dcdc28",
    "project": "5fa30ee658eba14ca75eb69c",
    "createdBy": "5fdbd0f42d8fb4348f3136fd",
    "createdAt": "2020-12-18T22:37:26.170Z",
    "updatedAt": "2020-12-18T22:37:26.170Z",
    "__v": 0
  },
  {
    "_id": "5fdd3216724b95367bb0856f",
    "buyer": "5f976504231cd73151dcdc28",
    "project": "5fa30ee658eba14ca75eb69c",
    "createdBy": "5fdbd0f42d8fb4348f3136fd",
    "createdAt": "2020-12-18T22:49:58.320Z",
    "updatedAt": "2020-12-18T22:49:58.320Z",
    "__v": 0
  }
]

После извлечения я рандомизирую их с помощью функции стиля Фишера-Йейтса:

async function randomizer(array){
    let currentIndex = array.length, temporaryValue, randomIndex;
      
    // While there remain elements to shuffle...
    while (0 !== currentIndex) {
  
      // Pick a remaining element...
      randomIndex = Math.floor(Math.random() * currentIndex);
      currentIndex -= 1;
  
      // And swap it with the current element.
      temporaryValue = array[currentIndex];
      array[currentIndex] = array[randomIndex];
      array[randomIndex] = temporaryValue;
    }
  
    return array;
}

Затем я беру этот рандомизированный массив и перебираю его циклом for:

for(let i = 0; i < reservations.length; i++){
      reservations[i].randomizedOrder = i; // Store randomized order in array
}

Но объекты в массиве по-прежнему выглядят так, без добавления поля randomizedOrder:

  {
    "_id": "5fdd3216724b95367bb0856f",
    "buyer": "5f976504231cd73151dcdc28",
    "project": "5fa30ee658eba14ca75eb69c",
    "createdBy": "5fdbd0f42d8fb4348f3136fd",
    "createdAt": "2020-12-18T22:49:58.320Z",
    "updatedAt": "2020-12-18T22:49:58.320Z",
    "__v": 0
  }

Вот по порядку:

      const options = {
        query: { project: "5fa30ee658eba14ca75eb69c" },
        populate: [],
        pagination: { limit: 0, skip: 0 },
        sort: {},
      };
      
      const reservations = await this.dbService.read('Reservation', options);
      const arr = reservations.data;

      function randomizer(array) {
        let currentIndex = array.length,
            temporaryValue, randomIndex;
    
        // While there remain elements to shuffle...
        while (0 !== currentIndex) {
    
            // Pick a remaining element...
            randomIndex = Math.floor(Math.random() * currentIndex);
            currentIndex -= 1;
    
            // And swap it with the current element.
            temporaryValue = array[currentIndex];
            array[currentIndex] = array[randomIndex];
            array[randomIndex] = temporaryValue;
        }
    
        return array;
      }

      const shuffledReservations = randomizer(arr);

      for(let i = 0; i < shuffledReservations.length; i++){
        arr[i].shuffledReservations = i; // Store randomized order in array
      }

Я добавил строку console.info() в цикл for, и цикл for определенно работает, поскольку он выдает console.infos, но он просто не добавляет свойство randomizedOrder в резервирование. Что я здесь делаю неправильно?

почему вы используете асинхронную функцию?

Re9iNee 22.12.2020 11:06

и каков ваш ожидаемый результат?

Re9iNee 22.12.2020 11:10
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
2
93
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

вам не нужно ключевое слово await для вызова рандомизатора! а также удалить ключевое слово async из объявления функции.

если вы не ожидали такого результата и у вас возникли проблемы с реализацией, оставьте комментарий!

let arr = [{
        "_id": "5fdd2f26724b95367bb08557",
        "buyer": "5f976504231cd73151dcdc28",
        "project": "5fa30ee658eba14ca75eb69c",
        "createdBy": "5fdbd0f42d8fb4348f3136fd",
        "createdAt": "2020-12-18T22:37:26.170Z",
        "updatedAt": "2020-12-18T22:37:26.170Z",
        "__v": 0
    },
    {
        "_id": "5fdd3216724b95367bb0856f",
        "buyer": "5f976504231cd73151dcdc28",
        "project": "5fa30ee658eba14ca75eb69c",
        "createdBy": "5fdbd0f42d8fb4348f3136fd",
        "createdAt": "2020-12-18T22:49:58.320Z",
        "updatedAt": "2020-12-18T22:49:58.320Z",
        "__v": 0
    }
];
function randomizer(array) {
    let currentIndex = array.length,
        temporaryValue, randomIndex;

    // While there remain elements to shuffle...
    while (0 !== currentIndex) {

        // Pick a remaining element...
        randomIndex = Math.floor(Math.random() * currentIndex);
        currentIndex -= 1;

        // And swap it with the current element.
        temporaryValue = array[currentIndex];
        array[currentIndex] = array[randomIndex];
        array[randomIndex] = temporaryValue;
    }
    console.info(array)
    return array;
}

for(let i = 0; i < arr.length; i++){
    arr[i].randomizedOrder = i; // Store randomized order in array
}

const shuffledReservations = randomizer(arr);

Другие вопросы по теме