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

TypeScript如何简便批量修改对象数组首个元素的所有属性值

批量为对象所有属性统一赋值的实现方案

你不需要手动枚举每个键名来赋值,下面几种写法都可以实现需求,且兼容你现有的FoodItems TypeScript类型定义,后续类型增减属性也不需要修改赋值逻辑:


1. 仅修改数组第一个对象(不修改原数据,生成新数组)

如果要遵循不可变数据规范,不改动原数组和原对象,用这个写法:

const newValue = 34;
const updatedArray = [
  // 遍历第一个对象的所有键批量赋值
  Object.keys(objArray[0]).reduce((acc, key) => {
    acc[key as keyof FoodItems] = newValue;
    return acc;
  }, {} as FoodItems),
  // 保留数组中第一个元素之后的其他内容
  ...objArray.slice(1)
];

2. 批量修改数组中所有对象的属性值

如果数组里不止一个对象,要把所有对象的属性都改成目标值,可以用Object.fromEntries简化写法:

const updatedAllArray = objArray.map(item => 
  Object.fromEntries(
    Object.keys(item).map(key => [key, newValue])
  ) as FoodItems
);

3. 直接修改原数组的第一个对象(会改动原数据)

如果不需要保留原数据,直接修改原对象的写法最简洁:

Object.keys(objArray[0]).forEach(key => {
  objArray[0][key as keyof FoodItems] = newValue;
});

说明

  • 代码中的as keyof FoodItems、as FoodItems是TypeScript类型断言,因为原生Object.keys默认返回string[]类型,加上断言后可以完全匹配你定义的类型,不会抛出类型错误。
  • 所有写法都不需要手动维护属性名列表,后续你给FoodItems类型增删属性,赋值逻辑不需要做任何调整。
  • 注意你描述里的小笔误:提到的FooItems[]和实际定义的FoodItems拼写不一致,实际使用时保持类型名统一即可。

内容的提问来源于stack exchange,提问作者Kiara Tansas

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 05:03:16