You need to enable JavaScript to run this app. JavaScript中如何对对象数组排序后完成映射遍历(适配React场景)
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript中如何对对象数组排序后完成映射遍历(适配React场景)

React 产品列表多维度排序实现

核心避坑提示:数组原生sort方法会直接修改原数组,务必先通过浅拷贝生成新数组后再执行排序,避免原数据源被意外污染,导致组件出现不可预期的渲染异常。

各维度排序逻辑实现

所有排序规则都可以通过给sort方法传入自定义比较函数适配,不需要引入额外工具库:

价格维度

价格比较必须取price.raw字段的数值计算,不要直接对比formatted格式的字符串,否则带货币符号、不同小数位数的价格会出现排序错误:

  • 价格从低到高排序:
const sortedProducts = [...products].sort((a, b) => a.price.raw - b.price.raw)
  • 价格从高到低排序:
const sortedProducts = [...products].sort((a, b) => b.price.raw - a.price.raw)

时间维度

时间维度可灵活选择created(产品创建时间)/updated(最近修改时间)作为比较依据,两个字段都是数值型时间戳,可直接做差值比较:

  • 按创建时间从早到晚排序:
const sortedProducts = [...products].sort((a, b) => a.created - b.created)
  • 按最近修改时间从新到旧排序(最新改动的产品排在列表最前):
const sortedProducts = [...products].sort((a, b) => b.updated - a.updated)

React 渲染适配注意

  • 示例数据中存在两条id="1"的重复产品,直接用product.id作为渲染key会触发React的重复key警告,可替换为组合唯一值(比如${product.id}-${product.created})作为key使用。
  • 完整可运行的渲染逻辑参考:
// 这里替换为你需要的任意排序规则即可
const sortedProducts = [...products].sort((a, b) => a.price.raw - b.price.raw)

return (
  sortedProducts.map(product => 
    <div key={`${product.id}-${product.created}`}>
      <h1>{product.name}</h1>
      <h2>{product.price.formatted}</h2>
    </div>
  )
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.22 10:36:04