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

如何实现订单步骤数组默认值与历史状态数据的匹配逻辑

实现方案

你可以通过「先构建历史状态映射,再遍历默认步骤匹配」的逻辑实现需求,两种常用写法如下:


写法1:高性能版本(推荐)

用Map构建状态名到历史记录的映射,避免重复遍历历史数组,适合状态数量较多的场景:

// 默认订单步骤
const defaultSteps = [
  'In preparation',
  'Order taken from courier',
  'Order is on its way',
  'Order delivered to customer',
  'Partner declined order'
];

// 后端返回的状态历史数据
const history = [ 
  { status_name: "In preparation", status_id: "62a74ac2fc767ef024f031cd", date_updated: "2022-06-14T20:29:51.784+00:00" }, 
  { status_name: "Order taken from courier", status_id: "62a74ac2fc767ef024f031cd", date_updated: "2022-06-14T20:29:51.784+00:00" } 
];

// 构建状态名 -> 历史记录的映射表
const historyMap = new Map(
  history.map(record => [record.status_name, record])
);

// 遍历默认步骤生成目标数组
const result = defaultSteps.map(step => {
  return historyMap.get(step) ?? step;
});

写法2:简洁版本(适合少量步骤场景)

如果订单步骤数量很少(比如个位数),可以直接用数组find方法匹配,代码更简短:

const result = defaultSteps.map(step => {
  const matchedRecord = history.find(record => record.status_name === step);
  return matchedRecord || step;
});

运行结果

两种写法得到的result结构完全一致:

[
  {
    status_name: "In preparation",
    status_id: "62a74ac2fc767ef024f031cd",
    date_updated: "2022-06-14T20:29:51.784+00:00"
  },
  {
    status_name: "Order taken from courier",
    status_id: "62a74ac2fc767ef024f031cd",
    date_updated: "2022-06-14T20:29:51.784+00:00"
  },
  "Order is on its way",
  "Order delivered to customer",
  "Partner declined order"
]

兼容性提示:如果需要适配非常老的浏览器不支持??运算符,可以把return historyMap.get(step) ?? step替换为return historyMap.has(step) ? historyMap.get(step) : step即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 21:48:14