2
votes

L'objet Javascript n'ajoute pas de nouvel attribut

J'ai cette fonction, où je récupère un tableau d'objets, j'ai alors une boucle for pour faire une boucle sur les objets, et y ajouter un attribut index ou ind:

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

mais lorsque j'exécute ceci, les données sont renvoyées sous la forme

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

au lieu de:

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)
}

S'il vous plaît, comment puis-je résoudre ce problème


13 commentaires

Avez-vous essayé Object.assign ?


il n'y a rien de mal avec le code fourni pouvez-vous nous donner plus d'informations sur Customers.find ()


essayez ceci: wait Customers.find ({}, {"_id": 1}). toArray ();


Pouvez-vous indiquer la valeur de await Customers.find ({}, {"_id": 1}) ? Pour qu'il soit plus facile de fournir une solution.


Clients.update ({_id: 1}, {ind: '...'}, {multi: true}, function (err, num) {});


Double possible de Comment renvoyer la réponse d'un asynchrone appeler?


Clients.find () renvoie un curseur , vous découvrez ici comment l'utiliser correctement


vous pouvez ajouter un champ ind dans votre schéma Clients


Utilisez-vous de la mangouste?


@Anthony Winzlet oui je le suis


Ensuite, utilisez .lean ()


@Anthony Winzlet où et comment?


Avez-vous vérifié la réponse?


4 Réponses :


0
votes

Il semble que vos objets sont gelés, identifiez la bibliothèque que vous utilisez pour récupérer ces éléments à partir de votre source de données, mais vous pouvez en savoir plus sur le gel des objets ici https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/ geler


1 commentaires

La question est balisée mongodb



2
votes

changez votre pour et transformez-le en map

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

ou au lieu de cela renvoyer le client, vous pouvez créer un tout nouveau client .

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;
}


0 commentaires

0
votes

Essayez de copier les valeurs vers les objets cibles individuels avec 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 commentaires

0
votes

Je l'ai enfin résolu. Je pense que mangouste a joué avec ça. Mais l'ajout de ._doc semble l'avoir corrigé

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

    let customer = customers[i], 

    customer._doc = {
      ...customer._doc,
      index: i
    };
}


0 commentaires