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
相关产品推荐
相关产品推荐

