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

JavaScript中按姓氏与年龄分组生成连续order字段的实现

实现JavaScript数组按规则添加order字段

需求说明

需要将给定的JavaScript数组转换为包含order字段的新数组,规则如下:

  • 当元素的surname(姓氏)和age(年龄)同时相同时,共享同一个order值,不递增计数
  • 其余元素按顺序递增order数值

原始数组

[
  {name:"jhon",surname:"connor",age:21},
  {name:"jhonny",surname:"lator",age:22},
  {name:"celia",surname:"mcgregor",age:23},
  {name:"raul",surname:"fernandez",age:25},
  {name:"marcela",surname:"fernandez",age:25},
  {name:"omar",surname:"caster",age:26},
  {name:"luna",surname:"potter",age:30},
  {name:"harry",surname:"potter",age:30},
]

目标数组

[
  {order:1,name:"jhon",surname:"connor",age:21},
  {order:2,name:"jhonny",surname:"lator",age:22},
  {order:3,name:"celia",surname:"mcgregor",age:23},
  {order:4,name:"raul",surname:"fernandez",age:25},
  {order:4,name:"marcela",surname:"fernandez",age:25},
  {order:5,name:"omar",surname:"caster",age:26},
  {order:6,name:"luna",surname:"potter",age:30},
  {order:6,name:"harry",surname:"potter",age:30},
]

解决方案代码

const originalArray = [
  {name:"jhon",surname:"connor",age:21},
  {name:"jhonny",surname:"lator",age:22},
  {name:"celia",surname:"mcgregor",age:23},
  {name:"raul",surname:"fernandez",age:25},
  {name:"marcela",surname:"fernandez",age:25},
  {name:"omar",surname:"caster",age:26},
  {name:"luna",surname:"potter",age:30},
  {name:"harry",surname:"potter",age:30},
];

const resultArray = originalArray.reduce((acc, current) => {
  let currentOrder = acc.order;
  const prevItem = acc.result[acc.result.length - 1];
  
  // 首次遍历或当前元素与上一个元素的姓氏、年龄不同时,递增order
  if (!prevItem || prevItem.surname !== current.surname || prevItem.age !== current.age) {
    currentOrder = acc.order + 1;
  }
  
  acc.result.push({ order: currentOrder, ...current });
  acc.order = currentOrder;
  return acc;
}, { order: 0, result: [] }).result;

console.log(resultArray);

代码逻辑说明

  • 使用Array.reduce()方法遍历数组,通过累加器acc维护两个状态:当前的order计数和结果数组result
  • 每次遍历元素时,检查是否为第一个元素,或当前元素的surname和age是否与上一个已处理元素不同
  • 满足条件时,将order计数加1;否则沿用当前的order值
  • 将包含order字段的新元素推入结果数组,更新累加器状态后继续遍历
  • 最终从累加器中提取result字段,得到符合要求的目标数组

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 15:39:20