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 ..
3 Réponses :
Vous pouvez utiliser réduire et déstructuration a> Voici l'idée
id
comme clé dans l'objet op
id
est déjà là, nous fusionnons inp
et op[inp.id
inp
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 temp = [...array1,...array2,...array3]
let op = temp.reduce((op,inp)=>{
op[inp.id] = op[inp.id] || inp
op[inp.id] = {...op[inp.id],...inp}
return op
},{})
console.log(Object.values(op))
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
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)
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
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]
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
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