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

JS两个对象数组属性复制问题:循环仅获最后一个seat值

问题分析与解决方案

这问题我之前也碰到过!核心问题出在你用了嵌套循环,咱们一步步拆解:

为什么你的代码会只保留最后一个值?

你写的嵌套循环逻辑是:每遍历一个arr1的元素,就把arr2的所有元素的num都赋值为当前arr1元素的seat。举个例子:

  • 当i=0(对应arr1里的seat: '12'),内层循环会把arr2[0].num和arr2[1].num都改成'12'
  • 当i=1(对应arr1里的seat: '8'),内层循环又会把arr2的两个元素的num都覆盖成'8'
    最后自然所有num都是arr1最后一个元素的seat值了。

正确的实现方式

如果你的需求是按数组索引顺序对应赋值(arr1[0]的seat给arr2[0]的num,arr1[1]的seat给arr2[1]的num),只需要一层循环就够了:

方式1:普通for循环

let arr1 = [{'id': 'ee', 'seat': '12'}, {'id': 'aa', 'seat': '8'} ];
let arr2 = [ {'id': 's22', 'num': ''}, {'id': '2s2', 'num': ''} ];

for (let i = 0; i < arr1.length; i++) {
  // 加个判断避免数组越界(如果arr2比arr1短的话)
  if (arr2[i]) {
    arr2[i].num = arr1[i].seat;
  }
}

console.log(arr2);
// 输出结果:
// [ { id: 's22', num: '12' }, { id: '2s2', num: '8' } ]

方式2:forEach(更简洁)

如果你喜欢更现代的写法,用forEach遍历arr1,同时利用索引对应arr2的元素:

arr1.forEach((item, index) => {
  if (arr2[index]) {
    arr2[index].num = item.seat;
  }
});

扩展:如果是按条件匹配赋值(比如id对应)

如果以后你的需求变成根据id匹配赋值(虽然当前示例里两个数组的id不对应,但可以提前了解),可以用find方法:

// 假设arr1和arr2有可匹配的id字段
arr2.forEach(item2 => {
  const matchedItem = arr1.find(item1 => item1.id === item2.id);
  if (matchedItem) {
    item2.num = matchedItem.seat;
  }
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 08:29:18