2017-10-19 2 views
0

J'essaie de combiner deux objets JSON en utilisant angulaire et créer un seul objet. en quelque sorte, je suis en mesure de le faire, mais un petit pépin pas en mesure de trouver ce qui peut être fait pour que .. ci-dessous sont les deux objets JSON:combiner les deux objets JSON en fonction des ID

var array1 = [ 
      { 
     "personId" : 7, 
     "batchNumber": 213, 
     "name": "Mike", 
     "company":"abc" 
    }]; 

     var array2 = [ 
      { 
     "batchNumber": 213, 
     "role": "engineer" 

    }, 
    { 
     "batchNumber": 213, 
     "role": "architect" 
    }]; 

je veux la JSON résultante soit

var result = [ 
{ 
     "personId" : 7, 
     "batchNumber": 213, 
     "name": "Mike", 
     "company":"abc", 
     "role": "engineer" 
    } 
    { 
     "personId" : 7, 
     "batchNumber": 213, 
     "name": "Mike", 
     "company":"abc", 
     "role": "architect" 
    }] 

Je ne peux en créer qu'un seul json, puis la boucle est terminée/Toute aide serait reconnaissante d'avance.

var array1 = [{ 
 
    "personId" : 7, 
 
    "batchNumber": 213, 
 
    "name": "Mike", 
 
    "company":"abc" 
 
}, { 
 
    "personId" : 8, 
 
     "batchNumber": 218, 
 
     "name": "julie", 
 
     "company":"tyu" 
 
}]; 
 

 
var array2 = [{ 
 
     "batchNumber": 213, 
 
     "role": "engineer" 
 

 
    }, 
 
    { 
 
     "batchNumber": 213, 
 
     "role": "architect" 
 
    },{ 
 
     "batchNumber": 218, 
 
     "role": "BSA" 
 

 
    }, 
 
    { 
 
     "batchNumber": 218, 
 
     "role": "Manager" 
 
    }]; 
 

 
var newArray = []; 
 
for (var i = 0; i < array1.length; i++) { 
 
    var obj = array1[i]; 
 
\t if (array2[i] && obj.box == array2[i]._id) { 
 
    \t for (key in array2[i]) { 
 
     obj[key] = array2[i][key]; 
 
    } 
 
    newArray.push(obj); 
 
    } 
 
}; 
 

 
console.log(newArray);

Je joins le violon JS ainsi: https://jsfiddle.net/n9pv4pL3/

Mon contrôleur:

var array1 = [ 
     { 
    "personId" : 7, 
    "batchNumber": 213, 
    "name": "Mike", 
    "company":"abc" 
}]; 

    var array2 = [ 
     { 
    "batchNumber": 213, 
    "role": "engineer" 

}, 
{ 
    "batchNumber": 213, 
    "role": "architect" 
}]; 

    var newArray = [], i,key; 
    for (var i = 0; i < array2.length; i++) { 
     var obj = array2[i]; 
     if (array1[i] && obj. INPT_FILE_ID == array1[i].INPT_FILE_ID) { 
      for (key in array1[i]) { 
       obj[key] = array1[i][key]; 
      } 
      newArray.push(obj); 
     } 
    }; 
console.log(newArray); 
+0

lien violon manquant –

+0

Pravin Umamaheswaran i joint le lien violon – annie

Répondre

0

var array1 = [ 
 
       { 
 
        "personId": 7, 
 
        "batchNumber": 213, 
 
        "name": "Mike", 
 
        "company": "abc" 
 
       }]; 
 

 
       var array2 = [ 
 
       { 
 
        "batchNumber": 213, 
 
        "role": "engineer" 
 

 
       }, 
 
        { 
 
         "batchNumber": 213, 
 
         "role": "architect" 
 
        }]; 
 

 
       var finalData = []; 
 
       array1.forEach(data => { 
 
        //filter batchwise data 
 
        var dataFromArray2 = array2.filter(arry2 => {    
 
        return arry2.batchNumber === data.batchNumber }); 
 
        //pushing data in main array 
 
        dataFromArray2.forEach(batchData => { 
 
         finalData.push({ 
 
          personId: data.personId, 
 
          batchNumber: batchData.batchNumber, 
 
          name: data.name, 
 
          company: data.company, 
 
          role: batchData.role 
 
         }); 
 
        }); 
 
       }); 
 
       console.log(finalData)

ici, il est très bien géré, s'il vous plaît vérifier encore une fois, je l'ai également ajouté extrait pour cette et abou t méthode de filtrage qui renvoie le nouveau tableau filtré. dans notre cas, il est de retour nouveau tableau avec toutes les propriétés de array2 si vous voulez comprendre deap consulter le lien suivant https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter

+0

Merci pour votre réponse kushal i essayé la comme vous avez suggéré, il me donne le tableau vide .. et une autre chose pourrait vous s'il vous plaît expliquer est le travail de filtre ici merci d'avance – annie

+0

annie j'ai ajouté un extrait s'il vous plaît vérifier et modifier asnwer –

+0

merci pour votre réponse kushal il travaillé pour moi avec quelques modifications supplémentaires – annie

0

Ok si vous voulez regrouper tous les rôles sur une touche vous pourrait le faire avec 2 fonctions de réduction comme ceci:

let workingArray = array1.reduce((prevVal, currVal, index) => { 
    let role = array2.reduce((rPrevVal, rCurrVal, idx) => { 
    if (currVal.batchNumber === rCurrVal.batchNumber) { 
     rPrevVal.push(rCurrVal.role); 
    } 
    return rPrevVal; 
    }, []); 
    prevVal.push({ 
    ...currVal, 
    role 
    }); 
    return prevVal; 
}, []); 

console.log(workingArray); 

Il y a probablement une solution moins complexe, mais ce que je peux dire que je veux réduire la fonction :) Vérifiez violon ici (dans la console) j'ai ajouté 2 objets différents en première rangée et plusieurs objets en seconde:

https://fiddle.jshell.net/pegla/v4qqs3dk/2/