Given two object, named: ObjectA
and ObjectB
:
var ObjectA = {
config1: "5",
config2: "6",
config3: "7"
}
var ObjectB = {
config1: "1",
config2: "2",
config4: "3",
config5: "4"
}
How can I copy from ObjectB
to ObjectA
so that ObjectA
have the same properties of ObjectB
while the values of properties in ObjectA
is kept and values from ObjectB
that doesn't exist
in ObjectA
is copied to ObjectA
?
Expected result:
ObjectA = {
config1: "5",
config2: "6",
config4: "3",
config5: "4"
}
config3
is deleted since it doesn't exist in ObjectB
, config4
with config5
are copied to ObjectA
since those doesn't exist in ObjectA
, config1
with config2
are kept the same in ObjectA
since those two exist in both of the object) Use reduce
:
ObjectA = Object.keys(ObjectB).reduce(
(acc, key) => ({ ...acc, [key]: ObjectA[key] ?? ObjectB[key]}), {}
)
This will use the keys from ObjectB
, take values from ObjectA
, when they exist (with fallback to ObjectB
), and populate an empty object with the results.
You can use the reducer function to solve.
var ObjectA = { config1: "5", config2: "6", config3: "7" } var ObjectB = { config1: "1", config2: "2", config4: "3", config5: "4" } const res = Object.keys(ObjectB).reduce((prev, next) => { if(ObjectA[next]){ prev[next] = ObjectA[next]; } return prev; }, {...ObjectB}) console.log(res)
Here's a possible solution that is more old school: What this basically do:
function mergeObject(oldObj: Object, newObj: Object) {
var copyOfOldObj = Object.assign({}, oldObj);
for (const key in copyOfOldObj) {
if (!newObj.hasOwnProperty(key)) {
delete copyOfOldObj[key];
}
}
for (const key in newObj) {
if (!copyOfOldObj.hasOwnProperty(key)) {
copyOfOldObj[key] = newObj[key];
}
}
return copyOfOldObj;
}
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.