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

JavaScript如何不使用push向指定ID用户的cars数组追加新对象

回答

你现在用的concat本身就是不用push的实现方式,但存在一个问题:concat不会改动原数组,只会返回合并后的新数组,你当前的代码没有把新数组赋值回原用户的cars属性,所以原inventory里id=1的用户数据并不会更新。

给你几个更常用、更简洁的无push实现,按场景选择即可:

  • 不可变写法(推荐,无副作用):用数组扩展运算符,代码可读性最高,也是目前前端开发的主流写法
    const targetUser = inventory.find(item => item.id === 1);
    // 生成新数组替换原cars属性,不会修改旧的cars数组引用
    targetUser.cars = [...targetUser.cars, { model: "Porsche", year: "2009" }];
    
  • 原数组修改写法1:splice实现:直接在原数组上插入元素,不需要生成新数组
    const targetUser = inventory.find(item => item.id === 1);
    // 第一个参数指定插入位置为数组末尾,第二个参数传0代表不删除元素,后面传入要插入的内容
    targetUser.cars.splice(targetUser.cars.length, 0, { model: "Porsche", year: "2009" });
    
  • 原数组修改写法2:索引直接赋值:最原生的写法,本质和push的底层实现逻辑一致
    const targetUser = inventory.find(item => item.id === 1);
    targetUser.cars[targetUser.cars.length] = { model: "Porsche", year: "2009" };
    

补充:如果你需要完全不修改原inventory的所有数据(比如React状态更新场景),可以在遍历inventory的时候生成全新的数组和对象,连原用户对象的引用都不改动:

const newInventory = inventory.map(user => {
  if(user.id !== 1) return user;
  return {
    ...user,
    cars: [...user.cars, { model: "Porsche", year: "2009" }]
  }
})

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 03:42:17