Je dois vous installer / organiser des ensembles ... En fin de compte, je souhaite que les objets de Test2 modifient les propriétés dans le test mais préservent la propriété de localisation dans l'objet d'origine car il n'a pas changé ou même référencé dans le test2. P> Ce que j'ai fait a été configuré une mappage que la clé est l'identifiant et utilise chaque objet comme valeur. P> Le problème se produit que la valeur du nouvel objet par la clé écrase l'objet d'origine précédent dans son ensemble. Par conséquent, la propriété de localisation est éliminée de la matrice d'origine. p> notamment de objet.Assign () L'objet nu non présenté sous forme de tableau d'objets conservera l'intégrité de l'objet d'origine et ne modifie que des propriétés sous-jacentes. p> Voici un exemple de: P> Array d'objets: P> var test = [{id: 1, prop: 'bill', location: 'san diego'},{id: 11, prop: 'bright'}];
var first = new Map();
for (const value of test) {
//console.log(key + ' = ' + value.id);
first.set(value.id, value);
//console.log(first);
}
var test2 = [{id: 1, prop: 'casey'},{id: 11, prop: 'candle'}];
var second = new Map();
for (const value of test2) {
second.set(value.id, value);
}
var merged = new Map([...first, ...second]);
let mergedArray = [];
for (var value of merged.values()) {
console.log(' = ' + value);
mergedArray.push(value);
}
console.log('merged', mergedArray);
// console.log(merged)
// console.log('second2', second);
// console.log('first2 ', first);
3 Réponses :
const merged = test.map(ele => { const found = test2.find(({id}) => id === ele.id) || {} return {...ele, ...found} }) loop over test find the same id element in test2 (if not found set an empty object) return the merged object where test is the source and test2 contains the overwrites/additions
ok donc ce que je crois que je faisais mal ... essentiellement, c'est la même chose, à l'exception de chacun de mon identifiant de ma carte, c'est une valeur alors quand elle fusionne la valeur complète de la fusion ... mais j'avais besoin de chaque objet pour remplacer les propriétés qui sont ce que vous avez fait. intéressant.
Si ma solution était la chose que vous recherchez, marquez-la comme acceptée ou demandez une aide supplémentaire
édité le fonctionnement pour travailler même si test2 code> a des membres qui n'existent pas dans
test code>
Essayez quelque chose comme ça.
p>
const test = [{ id: 1, prop: 'bill', location: 'san diego' }, { id: 11, prop: 'bright' }, { id: 12, //not in test2 prop: 'something', location: 'NY' }, { id: 13, //no "prop" in test2 prop: 'something', location: 'NY' } ]; const test2 = [{ id: 1, prop: 'casey' }, { id: '11', prop: 'candle' }, { id: 13, something: false }, { id: 100, // not in test prop: 'other' } ]; test.forEach(t => { const t2 = test2.find(t2 => t2.id == t.id);//=== for exact match if (t2) t.prop = t2.prop || t.prop; }); console.log(test);
Utilisation de Double Equals == code> est une mauvaise idée, une chaîne et des identifiants numériques indiscernables et fusionnés
@Marcin Ceci est fait avec but. Dans ce cas, ils devraient être indiscernables.
Ce n'est pas ça. L'intégrité de l'objet initial doit rester la même pour les propriétés qui ne sont pas copiées de l'objet entrant
Je veux que cela soit clair aussi pourquoi cela ne suffit pas. Votre solution dépend de la déclaration correspondant à une propriété que vous recherchez. Bien que ce qui précède correspond à l'objet entier. Ce qui est entrant doit remplacer s'il est moins ou plus. Quelles sont il ne doit pas être remplacé s'il n'y a pas de propriété primordiale correspondante. Et la solution ci-dessus est plus facile à lire surtout avec le principe de Kiss que vous avez suggéré plus tôt
Comme vous pouvez le voir à partir de l'extrait, test code> est mis à jour IFF B>
ID code> correspondant (lâchement
== code> ou exact
=== code>) et i> la propriété (
pro code>) existe dans
test2 code>.
@Alexkudryashev, mais je ne veux pas que cela s'inquiète de toute propriété dans l'objet autre que de correspondre à l'ID. Les autres propriétés doivent être libres de changer.
C'est exactement ce que fait mon extrait.
Fournir cette réponse à l'aide de la fonction MAP () de telle sorte qu'un objet puisse être défini sur une valeur de clé en premier. La réponse acceptée est courte et concise, mais cela peut avoir une valeur supplémentaire.
Appliquez le principe de Kiss.