您的位置:首页 > 财经 > 产业 > 对象属性值合并方法ts语言

对象属性值合并方法ts语言

2024/12/22 14:51:09 来源:https://blog.csdn.net/irisMoon06/article/details/140082182  浏览:    关键词:对象属性值合并方法ts语言

把两个对象进行合并,传入的对象中属性值有值,就用传入的对象。若传入的对象中,属性值没有值,或没有属性值,则用默认值。

let inputObj = {people: {name: 'jack',age: 30,},car: {color: 'black',logo: 'bmw',power: {energy: 'fuel',driveSystem: '4x4',},},nationality: 'china'
};let defaultObj = {people: {name: '',age: 18,},car: {color: 'white',logo: 'vw',power: {type: 'suv',energy: 'fuel',driveSystem: '2',},},nationality: 'earth'
};

 代码如下:

export function mergeObjects(inputObject: any, defaultObject: any) {let mergedObject = {};// 遍历默认对象中的字段for (let key in defaultObject) {// eslint-disable-next-line no-prototype-builtinsif (defaultObject.hasOwnProperty(key)) {// 检查inputObject中是否有这个key// eslint-disable-next-line no-prototype-builtinsif (inputObject.hasOwnProperty(key)) {// 如果两个对象的值都是对象类型,则递归合并它们if (typeof defaultObject[key] === 'object' && typeof inputObject[key] === 'object' && !Array.isArray(defaultObject[key]) && !Array.isArray(inputObject[key])) {mergedObject[key] = mergeObjects(inputObject[key], defaultObject[key]);} else {mergedObject[key] = inputObject[key]; // 否则使用inputObject中的值}} else {mergedObject[key] = defaultObject[key];  // 如果inputObject中没有这个key,则使用defaultObject中的值}}}// 遍历inputObject中的字段,确保所有字段都包含在合并后的对象中for (let key in inputObject) {// eslint-disable-next-line no-prototype-builtinsif (inputObject.hasOwnProperty(key)) {// eslint-disable-next-line no-prototype-builtinsif (!mergedObject.hasOwnProperty(key)) {mergedObject[key] = inputObject[key];}}}return mergedObject;
};

说明一下,对于“hasOwnProperty”的作用,if (inputObject.hasOwnProperty(key))这一行的判断还是很有必要的,在合并对象函数中,使用 hasOwnProperty 确保只处理 inputObjectdefaultObject 自身的属性,而不包括从原型链继承来的属性。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com