0
votes

Comment pousser des données dans un élément existant du tableau d'objets dans nodejs?

J'ai cette liste d'objets de tableau.

var lists = req.cookies.list;

Object.keys(lists).forEach(function(item) {
    if(req.params.ID == lists[item].ID){  //look for match with name
      (lists[item]).push(timeAndOTPArray);
        newAddedList.push(lists[item]);
        console.log(item, lists[item]);
      }
});

Maintenant, je veux pousser deux autres données dans un élément spécifique de ce tableau via forLoop comme:

var timeAndOTPArray = {
  "time" : new Date(),
  "OTP": req.params.ran
}

Je récupère les données de la liste via des cookies dans l'un des itinéraires.

Voici le code que j'essaie de pousser l'élément en fonction de la condition correspondante.

var list = [{
  'ID':1,
  'name' : 'Vikas Yadav',
  'mobile':8095638475,
  'sent':false
},
{
'ID':2,
'name' : 'Rajat Shukla',
'mobile':7486903546,
'sent':false

},
{
'ID':3,
'name' : 'Munna Bhaiya',
'mobile':9056284550,
'sent':false
},
{
'ID':4,
'name' : 'Guddu Pandit',
'mobile':7780543209,
'sent':false
},
{
'ID':5,
'name' : 'Srivani Iyer',
'mobile':8880976501,
'sent':false
}];

Ce n'est peut-être pas la bonne manière. Veuillez aider! Je vous souhaite un Diwali heureux et prospère. À votre santé!


0 commentaires

5 Réponses :


-1
votes

Voici les lists sont un tableau d'objets. donc lists[item] est un objet, donc vous ne pouvez pas pousser un objet vers un objet.

Dans votre code timeAndOTPArray est un objet.

Dans votre objet lists , initialisez un tableau vide appelé timeAndOTPArray

var index = lists.findIndex(function(item){ return item.ID == req.params.ID});
lists[index].timeAndOTPArray.push(timeAndOTPArray);


1 commentaires

Il veut ajouter ces attributs ... c'est ce qu'il voulait dire en disant push



0
votes

Je suppose que cela aidera

var lists = req.cookies.list;

Object.keys(lists).forEach(function(item) {
    if(req.params.ID == lists[item].ID){  //look for match with ID
      Object.keys(timeAndOTPArray).forEach(key=>{
        lists[item][key]=timeAndOTPArray[key];
      })
      }
});


0 commentaires

1
votes

Vous pouvez utiliser findIndex et append pour mettre à jour l'objet dans la liste comme ceci:

//List only with ID, easier to read the code
var list = [{'ID':1,},{'ID':2,}]
//your object
var timeAndOTPArray = {
  "time" : new Date(),
  "OTP": "otp"
}
//Index where object with ID == 2 is
var index = list.findIndex(obj => obj.ID == 2);
//Append the 'timeAndOTPArray' properties into the object itself
list[index] = {"time": timeAndOTPArray.time, "OTP":timeAndOTPArray.OTP, ...list[index]}

console.log(list)


0 commentaires

0
votes

Bonsoir) Je peux vous conseiller que la meilleure option est de mettre à jour avec la carte

const listItems = [
  {
    ID: 1,
    name: 'Vikas Yadav',
    mobile: 8095638475,
    sent: false,
  },
  {
    ID: 2,
    name: 'Rajat Shukla',
    mobile: 7486903546,
    sent: false,
  },
  {
    ID: 3,
    name: 'Munna Bhaiya',
    mobile: 9056284550,
    sent: false,
  },
  {
    ID: 4,
    name: 'Guddu Pandit',
    mobile: 7780543209,
    sent: false,
  },
  {
    ID: 5,
    name: 'Srivani Iyer',
    mobile: 8880976501,
    sent: false,
  },
];

const paramId = 4;

const result = listItems.map((item) => {
  if (paramId === item.ID) {
    return {
      ...item,
      time: new Date(),
      OTP: 'smth',
    };
  }

  return item;
});

console.log('result', result);


0 commentaires

0
votes

pour l'ajout, vous pouvez le faire,

lists[index] = {...lists[index], timeAndOTPArray};

Si vous utilisez es6,

 lists[index] = Object.assign(lists[index], timeAndOTPArray);


0 commentaires