3
votes

Comment fusionner trois tableaux différents en comparant avec id? dans Angular 6

Arrays:

resultarray = [
    {id:1, name: "raju", degree:"b.com",age:20},
    {id:2, name: "ravi"},
    {id:3, degree:"b.a", age:21},
    {id:4, name:"john", degree:"c.a"},
    {id:5, degree:"horticulture"},
    {id:6, name:"jack", age:27},
    {id:7, age:25}
 ] 

Le résultat requis est:

 array1 = [{id:1, name:"raju"},{id:2, name:"ravi"},{id:4, name:"john"},{id:6, name:"jack"}];
 array2= [{id:1, degree:"b.com"},{id:3, degree:"b.a"},{id:4, degree:"c.a"},{id:5, degree:"horticulture"}];
 array3= [{id:1, age:20},{id:3, age:21},{id:6, age:27},{id:7, age:25}];

J'ai essayé différentes fonctions et essayé pour deux tableaux, mais je n'ai pas pu fusionner l'objet qui n'a pas d'identifiant à comparer ..


1 commentaires

salut, y a-t-il une alternative pour object.values ​​& object.keys .. parce que ces deux ne fonctionnent pas dans IE11 .. existe-t-il un autre moyen d'obtenir cette sortie sans utiliser object.values ​​& object.keys


3 Réponses :


7
votes

6 commentaires

pouvons-nous garder ce tableau de résultats en tant qu'enfant d'un id parent (un autre id différent)


@PhaniKumarDevu Je suis incapable de comprendre ce que vous entendez par la ligne ci-dessus, pouvez-vous ajouter une explication ou un exemple?


Je veux dire qu'il y aura un autre identifiant comme {UserID: 201, Userrating: resultarray} ici UserID est parent et Userrating est enfant.


Vous pouvez simplement définir la valeur de la clé userrating sur output que nous obtenons, {userId: 201, userrating: Object.values ​​(op)} quelque chose comme ce


salut, y a-t-il une alternative pour object.values ​​& object.keys .. parce que ces deux ne fonctionnent pas dans IE11 .. existe-t-il un autre moyen d'obtenir cette sortie sans utiliser object.values ​​& object.keys


@PhaniKumarDevu, vous pouvez utiliser polyfill pour cet Object.values ​​ployfill



2
votes

une solution possible:

let array1 = [{id:1, name:"raju"},{id:2, name:"ravi"},{id:4, name:"john"},{id:6, name:"jack"}];
let array2= [{id:1, degree:"b.com"},{id:3, degree:"b.a"},{id:4, degree:"c.a"},{id:5, degree:"horticulture"}];
let array3= [{id:1, age:20},{id:3, age:21},{id:6, age:27},{id:7, age:25}];

let resp = [].concat(array1, array2, array3).reduce((acc, ele) => {
        let obj = acc.find(x => x.id === ele.id);
        return obj ? (Object.keys(ele).forEach(x => obj[x] = ele[x]), acc) : acc.concat(ele);
    }, [])
    
console.log(resp)


4 commentaires

pouvons-nous garder ce tableau de résultats en tant qu'enfant d'un id parent (un autre id différent)


ouais, pourriez-vous expliquer comment faites-vous semblant de décider lequel est parent?


Je veux dire qu'il y aura un autre identifiant comme {UserID: 201, Userrating: resultarray} ici UserID est parent et Userrating est enfant.


salut, y a-t-il une alternative pour object.values ​​& object.keys .. parce que ces deux ne fonctionnent pas dans IE11 .. existe-t-il un autre moyen d'obtenir cette sortie sans utiliser object.values ​​& object.keys



1
votes

Il y aura de meilleures solutions que celle-ci, mais voici ce que j'ai essayé:

Fusion des 3 tableaux en un seul:

result = [ { id: 1, age: 20, name: 'raju', degree: 'b.com' },
  { id: 2, name: 'ravi' },
  { id: 3, age: 21, degree: 'b.a' },
  { id: 4, degree: 'c.a', name: 'john' },
  { id: 5, degree: 'horticulture' },
  { id: 6, age: 27, name: 'jack' },
  { id: 7, age: 25 } ]

En boucle sur les éléments et puis en mettant les valeurs à "objet"

object = { '1': { id: 1, age: 20, name: 'raju', degree: 'b.com' },
      '2': { id: 2, name: 'ravi' },
      '3': { id: 3, age: 21, degree: 'b.a' },
      '4': { id: 4, degree: 'c.a', name: 'john' },
      '5': { id: 5, degree: 'horticulture' },
      '6': { id: 6, age: 27, name: 'jack' },
      '7': { id: 7, age: 25 } }

Solution finale

result = Object.values(object)

la variable objet contiendra

let object = {}    
array.forEach((item) => {
    object[item.id] = { ...object[item.id],...item}})

La variable de résultat contiendra

let array = [...array1, ...array2, ...array3]


5 commentaires

Oh, j'ajoutais cette solution, 2 personnes ont déjà résolu et posté leurs réponses :)


pouvons-nous garder ce tableau de résultats en tant qu'enfant d'un id parent (un autre id différent)


ouais on peut c'est une liste d'objets. attendez mal mettre à jour la réponse


Je veux dire qu'il y aura un autre identifiant comme {UserID: 201, Userrating: resultarray} ici UserID est parent et Userrating est enfant.


salut, y a-t-il une alternative pour object.values ​​& object.keys .. parce que ces deux ne fonctionnent pas dans IE11 .. existe-t-il un autre moyen d'obtenir cette sortie sans utiliser object.values ​​& object.keys