IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

Comparer deux tableaux et obtenir uniquement les valeurs non identiques


Sujet :

JavaScript

Vue hybride

artenis Comparer deux tableaux et... 06/12/2022, 17h06
mathieu vous avez mis le "return"... 06/12/2022, 18h12
artenis Merci c'est vrai, mais c'est... 06/12/2022, 18h15
Toufik83 Bonjour, Vous pouvez... 08/12/2022, 11h51
artenis Merci. Malheureusement pour... 08/12/2022, 14h19
Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2011
    Messages
    253
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 253
    Par défaut Comparer deux tableaux et obtenir uniquement les valeurs non identiques
    Bonjour.
    titre precedent : "Comment obtenir le TimeStamp qui ne correspond pas aux jours identiques en comparant deux tableaux".

    J'ai édité le titre de ma question, car je viens de remarquer que pour une simple comparaison de chiffres la condition "false" pour non égal ne fonction pas non plus .
    avec cet exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    let Arr1 = [12, 5, 8, 130, 44], Arr2 =
    [12, 54, 18, 130, 44];
     
    let s = [];
    for (var i = 0; i < Arr1.length; i++) {
        for (var j = 0; j < Arr2.length; j++) {
          if(Arr1[i] === Arr2[j]){
     
          }else{
            s.push(Arr1[i]);
          }
     
          console.log(s);
        }
     
    }
    //resultat : [12,12,12,12,5,5,5,5,5,8,8,8,8,8,130,130,130,130,44,44,44,44]
    Quelqu'un peut-il m'expliquer .Je ne trouve aucune explication


    Je cherche à faire une comparaison de deux tableaux contenant des valeurs Timestamp (dates Unix) en vérifiant que les dates converties* respectives ne sont pas les mêmes dans chaque tableau et si c'est le cas d'afficher la ou les Timestamp qui correspondent .
    * dates converties = je vérifie: l'année, le mois et le jour.

    Actuellement mon code qui respecte toutes les conditions désirées m'affiche un résultat qui ne correspond pas à ce que j'attends.
    Codepen de mon code

    La valeur retournée est [1670331420], alors qu'elle devrait être [1670417820]
    Si vous pouvez m'aider à comprendre mon erreur , je vous remercie.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    //TimeStamp from period choose by user
    let Array1 = [1670245020, 1670331420, 1670417820];
    let Array2 = [1670251033, 1670335700];
    //Dans l'ordre des timestamp : 5, 6 et 7 dec .
     
    const TimeStampAreOnSameDay = (Time1, Time2) =>
      Time1.getFullYear() === Time2.getFullYear() &&
      Time1.getMonth() === Time2.getMonth() &&
      Time1.getDate() === Time2.getDate();
     
    //console.log(TimeStampAreOnSameDay(new Date(1670417820*1000),new Date(1670335700*1000)));
     
    function SamedayCompare(Array1, Array2) {
     let DSelected = [];
      for (var i = 0; i < Array2.length; i++) {
     
        for (var j = 0; j < Array1.length; j++) {
          let nbchoose = Array1.length,
            nbexisting = Array2.length;
          let result = TimeStampAreOnSameDay(
            new Date(Array2[i] * 1000),
            new Date(Array1[j] * 1000)
          );
          if (result !== true) {
            DSelected.push(Array1[j]); //Add these values
          }
        }
     
      }
    return DSelected;
    }
    console.log(SamedayCompare(Array1, Array2));

  2. #2
    Expert confirmé
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 644
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 644
    Par défaut
    vous avez mis le "return" dans une des boucles au lieu de le mettre à la fin de la fonction. donc la boucle n'est pas parcourue complètement.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2011
    Messages
    253
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 253
    Par défaut
    Merci c'est vrai, mais c'est parce que justement en fin de fonction ça ne fonctionnait pas , même problème.
    Je corrige. Le problème a changé : mais déjà expérimenté:
    le résultat : [1670331420,1670417820,1670245020,1670417820]
    Voir le codepen pour voir le résultat en direct.

  4. #4
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 499
    Par défaut
    Bonjour,

    Vous pouvez utiliser new Set :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    let filter=[...new Set(Array1),...new Set(Array2)]
    //.map(d=>Date.parse(d)) //si vous voulez convertir les valeurs en timeSTamp...
    console.log("sans double :",filter); 
    //résultat => ['2022-12-06T12:57:00.000Z', '2022-12-07T12:57:00.000Z', '2022-12-05T14:37:13.000Z', '2022-12-06T14:08:20.000Z']
    Est-ce le résultat attendu ?

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2011
    Messages
    253
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 253
    Par défaut
    Merci.
    Malheureusement pour moi je n'ai jamais vu cette expression [...Array1, ...Array2] et donc je ne la comprend pas. Et même en la voyant je ne sais pas quoi chercher sur le web pour apprendre cette syntaxe. Si vous pouvez m'expliquer merci par avance , ou lors un lien vers une documentation.
    Par contre en testant le code, le résultat n'est pas celui souhaité.

    Mon objectif est de récupérer uniquement les dates(timestamp) qui n'ont pas le même jour (année, mois et jour uniquement !!!! sans l'horaire)
    Dans l'exemple fourni
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    let Array1 = [1670245020, 1670331420, 1670417820];
    let Array2 = [1670251033, 1670335700];
    //Dans l'ordre des timestamp : 5, 6 et 7 dec .
    Je cherche a obtenir la troisième date du premier tableau que ce soit en comparant le timestamp soit sa date (new Date(Timestamp *1000).
    le premier et deuxième timestamp ont le même jour mais pas la même heure !

    Pour visualiser mon objectif :
    - je créé un événement
    - je definis une date de début et de fin
    - par défaut le jour actuel est affiché dans la section Période (avec des input Time pour définir des horaires de début et de fin)
    - si l'event dure plus d'un jour en changeant la date de fin ou de debut la section Période se met à jour et affiche les jours par substitution ou par ajout selon le nouveau nombre de jours inclu entre les dates de début et de fin.
    - Ainsi je dois comparer les dates (timestamp) afin d'afficher les dates des jours incluant la période de l'événement.

    La version PHP fonctionne parfaitement, à présent je dois permettre de cette mise à jour en instantanée .

    En attendant qu'un nerd m'aide à comprendre j'essaie une autre solution pour simplement comparé la date (année-mois-jour) de (new Date()) en utilisant une regex mais là aussi j'apprends et je suis coincé par une chose qui semble extrêmement simple :
    L'intérêt ici serait de revenir à une comparaison de nombre simple et de l'associer à l'index das le tableau. (j'espère)

    la valeur : 2022-12-06T12:57:00.000Z
    le résultat souhaité : 20221206
    la méthode : obtenir tout les chiffres avant la lettre "T" en ignorer les tiret.
    la syntaxe qui permet de le faire séparément mais que je n'arrive pas à associé en une fois :
    ^.+?(?=T) = contenu avant la lettre T en partant du début
    \d = que les chiffres.

    il ya aussi : sélectionné tout les chiffres dont au moins 2 sont situés avant ou après un tiret

  6. #6
    Expert confirmé
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 644
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 644
    Par défaut
    les "..." correspondent à ça :
    https://developer.mozilla.org/fr/doc.../Spread_syntax

    Citation Envoyé par artenis Voir le message
    - si l'event dure plus d'un jour en changeant la date de fin ou de debut la section Période se met à jour et affiche les jours par substitution ou par ajout selon le nouveau nombre de jours inclu entre les dates de début et de fin.
    je n'ai pas compris à quoi correspond cette zone "période" pour votre évènement.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Des textes qui ne correspondent pas aux photos dans ma page !
    Par dhillig dans le forum Mise en page CSS
    Réponses: 1
    Dernier message: 07/03/2016, 02h44
  2. Mise en place de div qui ne correspond pas aux pourcentages de width
    Par francky74 dans le forum Mise en page CSS
    Réponses: 3
    Dernier message: 06/03/2015, 11h10
  3. timestamp qui ne change pas
    Par Mathieu72 dans le forum Langage SQL
    Réponses: 6
    Dernier message: 01/08/2007, 13h38
  4. [phpMyAdmin] Un coller qui ne correspond pas au copier du copier/coller
    Par lodan dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 1
    Dernier message: 24/02/2007, 12h53
  5. Réponses: 3
    Dernier message: 21/11/2006, 18h26

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo