Javascript объект не добавляет новый атрибут - PullRequest
0 голосов
/ 28 января 2019

У меня есть эта функция, где я получаю массив объектов, затем у меня есть цикл for для циклического перемещения по объектам и добавления к нему атрибута индекса или индекса:

module.exports.getCustomers = async (req, res) => {
  let customers = await Customers.find({}, { "_id": 1 });

  for (var i = 0; i < customers.length; i++) {
    customers[i].ind = i;
  }

  console.log(customers)
}

, но когда язапустите это, данные будут возвращены как

[
  { _id: ... },
  { _id: ... },
  ...
]

вместо:

[
   {_id: ..., ind: 0},
   {_id: ..., ind: 1},
   ...
]

Пожалуйста, как мне это исправить

Ответы [ 4 ]

0 голосов
/ 30 января 2019

Я наконец решил это.Я думаю, что mongoose возился с этим.Но добавление ._doc, кажется, исправило это

for (let i = 0; i < customers.length; i++) {

    let customer = customers[i], 

    customer._doc = {
      ...customer._doc,
      index: i
    };
}
0 голосов
/ 28 января 2019

измените ваш for и превратите его в map

module.exports.getCustomers = async (req, res) => {
  let customers = await Customers.find({}, { "_id": 1 });

  let mappedCustomers = customers.map((customer, index) => {
              customer['ind'] = index;
              return customer;
          });


  console.log(mappedCustomers);
  return mappedCustomers;
}

или вместо того, чтобы вернуть клиента, вы можете создать совершенно нового клиента.

let mappedCustomers = customers.map((customer, index) => {
              return {...customer, ind: index};
              });
0 голосов
/ 28 января 2019

Попробуйте скопировать значения в отдельные целевые объекты с помощью Object.assign.

module.exports.getCustomers = async(req, res) => {
  let customers = await Customers.find({}, {
    "_id": 1
  });

  for (var i = 0; i < customers.length; i++) {
    Object.assign(customers[i], {
      ind: i
    });
  }

  console.log(customers);
}
0 голосов
/ 28 января 2019

Похоже, что ваши объекты заблокированы. Идентифицируйте, какую библиотеку вы используете для извлечения этих элементов из вашего источника данных, но вы можете прочитать о зависании объектов здесь https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/freeze

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...