Без вложения, который можно легко сделать с помощью Object.assign
:
Object.assign({}, obj, { label: "New One" })
или с использованием расширения объекта:
{ ...obj, label: "New One" }
для поддержки вложенных объектов / массивов, вы должны вручную объединитьобъекты рекурсивно:
function merge(target, changes) {
const result = {};
for(const [key, value] of Object.entries(target).concat(Object.entries(changes))) {
if(Array.isArray(value)) {
// TODO
} else if(typeof value === "object") {
result[key] = merge(result[key] || {}, value);
} else {
result[key] = value;
}
}
return result;
}