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 :

Fusion d'objets json


Sujet :

JavaScript

  1. #1
    Membre confirmé
    Homme Profil pro
    Architecte sys d'info géographique
    Inscrit en
    Juin 2011
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Architecte sys d'info géographique
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2011
    Messages : 64
    Par défaut Fusion d'objets json
    bonjour

    je joins une capture de deux morceaux de deux arrays:

    Nom : screen70.jpg
Affichages : 128
Taille : 45,7 Ko

    J'essaye de faire une jointure dans un nouvel array (je veux récuperer le contenu de "cats"... et le champ de jointure est "id" (les arrays sont pas forcément dans le meme ordre)

    j'ai tenté le suivant, il y a bien le contenu le photos2 mais pas celui de photos2bis : il me faut cats. La console est appellée, mais ne renvoie rien

    merci...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    const photosmerge = {}; let id;
     
    for (id in photos2) {
      if(photos2.hasOwnProperty(id)){
        photosmerge[id] = photos2[id];
      }}
     
    for (id in photos2bis) {
      if(photos2bis.hasOwnProperty(id)){
        console.log(photos2bis[id].cats);
        photosmerge[id].cat = photos2bis[id].cats;
      }}

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

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

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 496
    Par défaut
    Comme ça?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    const photosmerge = {};
    for (let elem in photos2){
      let hasBis = Object.values(photos2bis).filter(bis => bis.id == photos2[elem].id)[0];
      if (hasBis){
            photosmerge[elem]={};
    	Object.assign(photosmerge[elem],photos2[elem],hasBis);
      }
    }
    console.log(photosmerge);

  3. #3
    Membre confirmé
    Homme Profil pro
    Architecte sys d'info géographique
    Inscrit en
    Juin 2011
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Architecte sys d'info géographique
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2011
    Messages : 64
    Par défaut
    merci d'avoir regardé pour moi mais malheureusement, ca donne cela seulement :

    Nom : screen73.jpg
Affichages : 68
Taille : 44,3 Ko

    j'ai essayé ainsi aussi :

    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
            sorted_photos2 = photos2.sort(function(a, b) {
                return a.id - b.id;
            });
     
            sorted_photos2bis = photos2bis.sort(function(a, b) {
                return a.id - b.id;
            });
     
            console.log(sorted_photos2bis);
     
            for (var i = 0; i < photos2.length; i++) {
                merged.push({
                lat: sorted_photos2[i].lat,
        cats: sorted_photos2bis[i].cats
                });
            }
    Mais il ose me dire :

    Uncaught TypeError: sorted_photos2bis[i] is undefined

    Voici un peu les contenus :

    Nom : screen72.jpg
Affichages : 69
Taille : 66,3 Ko

  4. #4
    Membre confirmé
    Homme Profil pro
    Architecte sys d'info géographique
    Inscrit en
    Juin 2011
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Architecte sys d'info géographique
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2011
    Messages : 64
    Par défaut
    en fait, je pense que votre code marche.

    mais j'ai un probleme de synchronicité pour mon photos2bis.

    tout est appelé à la suite, mais quand je demande la fusion, en fait le programme n'avait pas encore obtenu le contenu de photos2bis

    je ne maitrise pas les questions de 'async'

    j'ai donc fait un settimeout, c'est à dire que je lui demande d'attendre 2 secondes avant de faire la fusion, qu'il ait bien récupéré le contenu de photos2bis et ça marche.

    ca ira pour l'instant.

  5. #5
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 496
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Suisse

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

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

    Pour gérer la synchronisation, il faudrait mettre le code de traitement dans la fonction callback qui s'exécute lorsque toutes les données sont prêtes à l'utilisation.

    Généralement, il existent deux façons pour gérer ceci, soit en utilisant une fonction asynchrone async function myFunction(){/*...code*/} en combinaison avec await à l'intérieur, soit passer par une promesse new Promise((resolve,reject)=>{/*code....*/}) et résoudre le retour avec le paramètre resolve() à l'intérieur du callback then.

Discussions similaires

  1. [POO] Objet json , comment instancier un nouvel objet ?
    Par le_chomeur dans le forum Général JavaScript
    Réponses: 15
    Dernier message: 29/10/2008, 10h19
  2. retourner objet Json via ajax ? hmm
    Par Myfred dans le forum Général JavaScript
    Réponses: 18
    Dernier message: 25/06/2008, 11h06
  3. [POO] Restaurer un objet JSon en javascript
    Par GandalfZeGrey dans le forum Général JavaScript
    Réponses: 0
    Dernier message: 21/01/2008, 15h14
  4. Réponses: 6
    Dernier message: 11/01/2008, 21h13
  5. [POO] lecture objet json
    Par taouja dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 10/12/2007, 11h32

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