如何从现有对象动态向新对象添加指定属性值?
嘿,我懂你现在的需求——从现有对象里挑出部分属性放到新对象里,当前用循环赋值的方式虽然能跑,但其实有更简洁优雅的写法,而且还能兼顾类型安全(尽量别用any啦😉)。我给你整理几种实用方案:
1. 直接解构+手动赋值(最直观,适合固定属性)
如果已经明确知道要提取哪些属性,用对象解构可以快速拿到现有对象的属性,再把需要额外处理的属性(比如表单值)加进去:
// 假设你从PRODUCT_DATA的某一项提取属性 const targetItem = this.PRODUCT_DATA[0]; const newObject = { // 直接从目标对象提取需要的属性 _productSkuKey: targetItem._productSkuKey, // 处理来自表单的属性 _storeKey: this.itemPriceForm.get('location').value, // 加上其他你需要的属性,比如: // _productName: targetItem._productName, // _price: targetItem._price };
如果是要处理整个PRODUCT_DATA数组,生成只含目标属性的新对象数组,用map更合适:
const newObjectsArray = this.PRODUCT_DATA.map(item => ({ _productSkuKey: item._productSkuKey, _storeKey: this.itemPriceForm.get('location').value, // 其他需要的属性 }));
2. 通用属性提取函数(适合重复使用场景)
如果需要多次从不同对象提取属性,可以写一个通用工具函数,复用性更强,还能保留类型提示:
// 通用pick函数,只保留指定属性 function pickProperties<T extends object, K extends keyof T>(obj: T, keys: K[]): Pick<T, K> { return keys.reduce((result, key) => { result[key] = obj[key]; return result; }, {} as Pick<T, K>); } // 使用示例 const targetItem = this.PRODUCT_DATA[0]; // 先提取来自现有对象的属性 const baseProps = pickProperties(targetItem, ['_productSkuKey', '_productName']); // 合并额外属性 const newObject = { ...baseProps, _storeKey: this.itemPriceForm.get('location').value };
小提醒:避免当前代码的潜在问题
你当前的循环写法里,每次迭代都会覆盖同一个newObject的属性,最后newObject只会保留PRODUCT_DATA最后一项的_productSkuKey。如果你的目标是处理数组里的每一项,记得用map生成新数组,而不是反复覆盖同一个对象哦~
内容的提问来源于stack exchange,提问作者Euridice01
相关产品推荐
相关产品推荐

