0
votes

angularjs vérifie si la clé existe déjà et si elle n'existe pas, poussez-la vers la portée à l'intérieur de la boucle foreach

J'obtiens des données de Db en utilisant d'abord php pour construire une table, plus tard j'obtiens de nouvelles données json de socket et je mets à jour $ scope, ce dont j'ai besoin est de pousser des valeurs qui n'existent pas dans $ scope.

angular.forEach(event.market, (market ,keym) => {

   angular.forEach($scope.users.results, function(value, key) {

   if(value.marketId == keym) // keym = new marketId from socket
   {
     //do nothing
   }
  else
  {
     //push(new valuse);  
  }


   });
});


0 commentaires

3 Réponses :


0
votes

Avant de pousser dans un tableau, vérifiez si la dose marketId ne correspond à aucune clé et n'est pas présente dans le tableau également. Dans le cas contraire, vous devrez ajouter des conditions pour la vérification de marketId et la vérification du tableau.


7 commentaires

c'est ce que je fais mais la clé manquante ne correspond à aucune des clés, puis elle appuie sur la nouvelle clé les fois où elle ne correspond pas, si une clé ne correspond pas à 10 clés, elle appuie 10 fois


Pouvez-vous s'il vous plaît montrer un exemple d'échantillon d'entrée et de sortie?


si j'ai des identifiants de marché: 1,2,3,4 et que je reçois de nouvelles données de socket: ids 1,2,3,6 alors je dois trouver que 6 n'existent pas, dans ma boucle forEach, j'obtiens 4 fois que 6 n'existe pas et son identifiant de poussée 6 quatre fois car il ne correspond à aucun des identifiants, je veux pousser 1 fois, que puis-je faire pour que le code fonctionne et me dire que seul l'identifiant 6 n'est pas présent? Merci


arr1 = [1,2,3,4]; arr2 = [1,2,3,6] filteredarr = arr2.filter (e =>! arr1.includes (e)); arr1.concat (filtré)


merci Saima pour votre aide est-ce que cela peut fonctionner dans la boucle forEach et vérifier chaque tableau arr2 par rapport à arr1, va-t-il trouver le tableau manquant une fois et me montrer une fois que le tableau numéro 6 n'est pas trouvé? ou ça va me dire que 4 fois? , pouvez-vous montrer un exemple de code dans la boucle forEach? merci beaucoup pour votre aide


Si vous voulez le tester. Copiez-collez-le sur la console de votre navigateur. Et si vous utilisez un filtre et incluez, je suppose que vous n'aurez pas besoin de chaque


Je l'ai déjà fait dans mon code et son tableau 6 inclus, mais pour résoudre mon problème, j'en ai besoin à côté de ma pour chaque boucle et pour vérifier si keym existe ou non, mais ne me disant pas que le temps n'est pas égal à clés que j'ai déjà, j'en ai besoin une fois, merci encore



0
votes

D'après ce que j'ai compris, vous voulez ajouter dans un tableau, des objets manquants. Je pense que ce que vous essayez de faire peut être simplement réalisé par:

angular.forEach(event.market, (valueM, keyM) => {
  let isDuplicate = $scope.users.results.filter(user => /* some validation here */).length > 0;

  if(!isDuplicate) {
    // push new values
  }
})


2 commentaires

merci pour votre commentaire mais je ne comprends pas le: / * une validation ici * /, je suis nouveau sur angularJs :)


cette validation consiste à vérifier si l'objet existe déjà dans $ scope.users.results afin que vous n'ayez pas de doublons. Array.filter est une fonction javascript es6. Considérant qu'un utilisateur a un ID , ce que vous feriez est un $ scope.users.results.filter (user => user.id === valueM) .length> 0 qui se traduit pour obtenir tous les utilisateurs où l'ID utilisateur est une valeur, si ce tableau contient des éléments, il y a des doublons. Ce n'est pas autant angularjs que javascript



0
votes

qui a résolu mon problème:

angular.forEach(game.market, (market, keym) => {

  var addToArray = true;
  for (var i = 0; i < $scope.users.results.length; i++) {
    if ($scope.users.results[i].marketId == keym) {
      addToArray = false;
    }
  }
  if (addToArray) {


    $scope.users.results.push({
      marketId: keym,
      marketName: market.name
    });

  }

  $scope.users.results.marketName = ' ';
  $scope.users.results.marketId = ' ';

});

merci


0 commentaires