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

TypeScript如何向对象数组批量添加多个相同值元素?

问题描述

我希望向对象数组中添加多个值完全相同的元素,实现类似.push()但可指定数量的功能。我知道可以用array.push(a, b, c),但想要实现类似如下的操作:

interface Person {
  firstName: string;
  lastName: string;
  age: number;
}

const people: Person[] = [];
let numberPeople: number;

// 经过计算得到numberPeople,比如值为23

people.push({ firstName: '', lastName: 'Smith', age: 0 }, numberPeople);

我知道可以用循环(比如for (let i=0; i<numberPeople;i++) people.push(...)),但太繁琐。有没有更简便的方法?我是JavaScript和TypeScript新手。试过.fill(),但它没法指定自定义值?另外,我知道可以自定义函数(比如mpush(obj, count)),但更希望用更优雅的标准方法。

解决方案

方法1:Array.from() + 扩展运算符

利用Array.from()创建指定长度的数组,同时生成每个独立的对象,再通过扩展运算符一次性推入目标数组:

const personTemplate = { firstName: '', lastName: 'Smith', age: 0 };
// 每次创建新对象,避免所有元素引用同一个内存地址
people.push(...Array.from({ length: numberPeople }, () => ({ ...personTemplate })));

如果你的对象不需要后续修改,也可以直接返回原模板对象,省去展开操作:() => personTemplate。

方法2:Array.fill() + map()

先用fill()填充占位值(避免map()跳过空数组元素),再通过map()生成目标对象:

people.push(...Array(numberPeople).fill(null).map(() => ({ firstName: '', lastName: 'Smith', age: 0 })));

这种写法和第一种思路类似,只是用fill()先初始化数组,再替换元素。

方法3:concat()(不修改原数组场景)

如果不想改动原数组,而是生成包含新元素的新数组,可以用concat():

const updatedPeople = people.concat(
  Array.from({ length: numberPeople }, () => ({ firstName: '', lastName: 'Smith', age: 0 }))
);

但如果需要直接修改原数组,优先用前两种方法的push(......)写法。

内容的提问来源于stack exchange,提问作者Rick Ford

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 03:45:55