1
votes

Comment faire apparaître et décaler des éléments d'un tableau dans un objet?

J'ai un objet. Et j'ai un scénario dans lequel je veux en faire.

Scénario: Tous les tableaux et fonctionnalités ont été ajoutés dans objeTest. Après cela, je l'appellerai, je veux supprimer la valeur «mercredi» de l'index par défaut. Et je veux placer tous les «mercredis» dans l'ordre à partir du premier index.

* L'erreur obtenue suivante:

Uncaught TypeError: Impossible de lire la propriété «day» d'undefined * p>

Ce qui suit est un exemple pour mon problème. Vous pouvez essayer et vous verrez le message d'erreur de la console.

Je n'ai trouvé aucune solution, j'ai besoin de vos conseils et de votre solution.

Code:

[
 {
         day : 'Wednesday',
         month : 'June',
         comment : 'lorem ipsum dolor sit amet consectetur adipiscing elit'
},
{
         day : 'Wednesday',
         month : 'August',
         comment : 'lorem ipsum dolor sit amet consectetur adipiscing elit'
},
    {
        day : 'Sunday',
        month : 'July',
        comment : ''
      },

          {
         day : 'Friday',
         month : 'February',
         comment : 'lorem ipsum dolor sit amet consectetur adipiscing elit'
}];

Ainsi, les nouvelles dates de l'objet que je veux obtenir devraient ressembler à ceci dans l'objet:

var objeTest = {
  name : 'objeTest',
  langs : {
          0 : 'EN',
          1 : 'VI',
          2 : 'RU',
          3 : 'AR'
          },
  commentGeneral : 'testComment'
};

    var date = [{
        day : 'Sunday',
        month : 'July',
        comment : ''
      },
      {
         day : 'Wednesday',
         month : 'June',
         comment : 'lorem ipsum dolor sit amet consectetur adipiscing elit'
},
{
         day : 'Wednesday',
         month : 'June',
         comment : 'lorem ipsum dolor sit amet consectetur adipiscing elit'
},
          {
         day : 'Friday',
         month : 'February',
         comment : 'lorem ipsum dolor sit amet consectetur adipiscing elit'
}];

/**
  *  I don't want to remove that using the array adding 
  *  in the object process ( objeTest.dates = date.filter(...)etc).
  */
objeTest.dates = date;  // You couldn't change from adding process. I don't need this solution from here.
// If you couldn't understand, please read again scenario. Thanks for your interesting.

var myObjLeng = objeTest.dates.length;
console.log(objeTest);
for(var i = 0; i < myObjLeng; i++) {
    if(objeTest.dates[i].day == 'Wednesday') {
        objeTest.dates[i].pop();
        objeTest.dates[i].unshift();
    }
};

console.log(objeTest);


3 commentaires

Les mois doivent-ils également être dans l'ordre du calendrier pour vos mercredis?


Notez que votre unshift () sans argument ne fait pas ce que vous pensez qu'il devrait et pop () supprime le dernier élément quel que soit le jour et change votre indexation, d'où l'erreur survient


Non, je veux placer tous les «mercredis» dans l'ordre à partir du premier index du tableau. Je ne suis pas intéressé par l'ordre du calendrier pour «mercredi».


3 Réponses :


0
votes

Si vous avez besoin de séparer le tableau, le moyen le plus simple est d'oublier celui d'origine, puis de le redéfinir.

not_wednesdays = [];
wednesdays = [];

objeTest.dates.forEach(date=>{
    if (date.day=="Wednesday") {
        wednesdays.push(date);
    }
    else {
        not_wednesdays.push(date);
    }
});
objeTest.dates = not_wednesdays;


0 commentaires

2
votes

Essayez un tri .

objeTest.dates.sort((entryA, entryB) => {
  return (entryB.day === 'Wednesday') - (entryA.day === 'Wednesday')
});


3 commentaires

Merci pour la réponse, mais vous utilisez "date array", je n'en ai pas besoin. Je devrais utiliser «objeTest.dates» qui est important ici.


@huso Utilisez la référence que vous voulez à ce tableau ... ne change pas le fait qu'un tri est (apparemment) ce que vous voulez.


Je ne sais pas. Merci pour les conseils et la solution :)



1
votes

Vous pouvez utiliser le tri, veuillez lire ceci: Js Array Sort from w3schools Exemples de codes:

var points = [40, 100, 1, 5, 25, 10];
points.sort(function(a, b){return a - b}); // Output: 1,5,10,25,40,100
points.sort(function(a, b){return b - a}); // Output: 100,40,25,10,5,1


0 commentaires