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

JavaScript修改对象数组 拼接字段值生成指定结构新数组

JS数组按id配对拼接实现方案

核心逻辑

因为id=2固定对应名字(拼接在前)、id=1固定对应姓氏(拼接在后),且两类条目数量动态增长时同顺序的名和姓是一一配对的,只需要按顺序收集两类值,再按下标拼接即可:

  • 遍历原数组时,按id区分名字、姓氏
  • 遇到名字就新建目标对象,把名字值作为value的前缀
  • 遇到姓氏就按遍历到的姓氏顺序,找到对应位置的目标对象,把姓氏拼接到value末尾
  • 最终返回收集好的对象数组即可

reduce实现代码(符合你的使用需求)

const data = [
  { id: '1', label: 'Last Name', value: 'Smith' },
  { id: '1', label: 'Last Name', value: 'Blogs' },
  { id: '2', label: 'First Name', value: 'John' },
  { id: '2', label: 'First Name', value: 'Joe' }
];

const output = data.reduce((res, item) => {
  if (item.id === '2') {
    // 碰到名字先初始化条目,名字放前面
    res.list.push({
      key: 'Employee',
      value: item.value
    })
  }
  if (item.id === '1') {
    // 碰到姓氏按顺序拼到对应条目后面
    res.list[res.lastNameIndex].value += ` ${item.value}`;
    res.lastNameIndex++;
  }
  return res;
}, { list: [], lastNameIndex: 0 }).list;

运行后output的结构和要求完全一致:

[
  {key: 'Employee', value: 'John Smith'},
  {key: 'Employee', value: 'Joe Blogs'}
]

兼容乱序的增强版本

如果原数组里id的顺序不固定(比如所有姓氏排在所有名字前面、或者顺序打乱),可以先分组再拼接,适配性更强:

// 先按id把值分组
const grouped = data.reduce((map, item) => {
  map[item.id] ??= [];
  map[item.id].push(item.value);
  return map;
}, {});

// 按下标配对拼接
const output = grouped['2'].map((firstName, idx) => ({
  key: 'Employee',
  value: `${firstName} ${grouped['1'][idx]}`
}));

提示:如果业务中可能出现名字、姓氏数量不匹配的情况,可以在拼接前加长度判断,避免出现undefined拼接的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 03:03:39