You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从现有对象动态向新对象添加指定属性值?

嘿,我懂你现在的需求——从现有对象里挑出部分属性放到新对象里,当前用循环赋值的方式虽然能跑,但其实有更简洁优雅的写法,而且还能兼顾类型安全(尽量别用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 08:12:20