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

如何基于不完整的基准参考数组对SKU对象数组进行自定义排序

实现方案

核心思路是预先生成尺码到排序权重的映射表,避免直接排序时的格式兼容问题,同时保证所有尺码都按预设规则排列,不受库存返回结果影响。

实现步骤

  • 第一步:构建全量尺码权重映射
    从基准排序参考数据中,按颜色ID取出对应的全量尺码顺序数组,将其转换为「尺码-权重」的映射对象,权重值直接用尺码在数组中的索引即可,索引越小排序优先级越高。
  • 第二步:排序SKU数组
    调用数组的sort方法,对比两个SKU时直接取对应尺码的权重值做差,即可得到符合要求的排序结果。如果存在基准规则外的特殊尺码,可以统一设置最大权重让其排在列表末尾。
  • 第三步:标记售罄状态(可选)
    排序完成后,遍历SKU数组,判断尺码是否在有库存的返回数组中,不在的话将available字段设为false即可。

代码示例(JavaScript)

示例数据

// 原始SKU数据
const skuList = [
  { id: '1234567', size: 'L', available: true, color: { id: 1234 }},
  { id: '1234588', size: 'XS', available: true, color: { id: 1234 }},
  { id: '1234568', size: 'M', available: true, color: { id: 1234 }},
  { id: '1234569', size: 'XL', available: true, color: { id: 1234 }},
  { id: '1234573', size: 'S', available: true, color: { id: 1234 }}
]
// 全量基准排序参考数据
const sizeRuleMap = { "1234": ["XS", "S", "M", "L", "XL", "XXL"] }
// 接口返回的当前有库存尺码数组(示例为["S", "M"])
const inStockSizes = ["S", "M"]

实现代码

function sortSkuList(skuList, sizeRuleMap, inStockSizes) {
  if (skuList.length === 0) return []
  // 取当前SKU对应的颜色ID
  const colorId = skuList[0].color.id.toString()
  // 生成权重映射
  const sizeWeightMap = {}
  const fullSizeOrder = sizeRuleMap[colorId] || []
  fullSizeOrder.forEach((size, index) => {
    sizeWeightMap[size] = index
  })
  // 最大权重,用于基准外的未知尺码
  const maxWeight = fullSizeOrder.length

  // 排序 + 标记库存状态
  return skuList
    .sort((a, b) => {
      const weightA = sizeWeightMap[a.size] ?? maxWeight
      const weightB = sizeWeightMap[b.size] ?? maxWeight
      return weightA - weightB
    })
    .map(sku => ({
      ...sku,
      available: inStockSizes.includes(sku.size)
    }))
}

输出结果

const result = sortSkuList(skuList, sizeRuleMap, inStockSizes)
console.log(result)
/* 输出:
[
  { id: '1234588', size: 'XS', available: false, color: { id: 1234 }},
  { id: '1234573', size: 'S', available: true, color: { id: 1234 }},
  { id: '1234568', size: 'M', available: true, color: { id: 1234 }},
  { id: '1234567', size: 'L', available: false, color: { id: 1234 }},
  { id: '1234569', size: 'XL', available: false, color: { id: 1234 }}
]
*/

说明

该方案不限制尺码格式,只要全量基准规则中存在对应的尺码名称,就可以按预设顺序排列,兼容字母、数字、文字、混合格式的尺码。如果存在多颜色的SKU混合的情况,可以在排序时先按颜色ID分组,每组分别按对应颜色的尺码规则排序后再合并即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 14:15:02