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

JavaScript中如何按指定顺序提取并排列数组元素

实现指定顺序排序对象数组的方法

你可以基于数组的sort方法配合自定义优先级映射实现需求,这里以匹配code字段为例,实现逻辑如下:

示例代码

// 原货币数组
const currencyList = [
  {label: 'Turkish Lira', flag: 'TR', id: 1, code: 'TRY', symbol: '₺'},
  {label: 'United States Dollar', flag: 'US', id: 2, code: 'USD', symbol: '$'},
  {label: 'Argentina Peso', flag: 'AR', id: 3, code: 'ARS', symbol: '$'},
  {label: 'Bahraini Dinar', flag: 'BH', id: 4, code: 'BHD', symbol: ' BD'},
  {label: 'Brazilian Real', flag: 'BR', id: 5, code: 'BRL', symbol: ' R$'},
  {label: 'Bulgarian Lev', flag: 'BG', id: 6, code: 'BGN', symbol: ' лв'},
  {label: 'Chilean Peso', flag: 'CL', id: 7, code: 'CLP', symbol: '$'},
]

// 按「阿根廷、智利、美国」顺序定义优先级,对应货币的code值
const sortPriority = ['ARS', 'CLP', 'USD']

// 排序实现:如果不需要修改原数组,可先浅拷贝再排序:[...currencyList].sort(...)
const sortedCurrencyList = currencyList.sort((a, b) => {
  const aPriority = sortPriority.indexOf(a.code)
  const bPriority = sortPriority.indexOf(b.code)

  // 两个元素都不在优先级列表内,按原有id从小到大排序
  if (aPriority === -1 && bPriority === -1) return a.id - b.id
  // a不在优先级内,b在,a排在后面
  if (aPriority === -1) return 1
  // b不在优先级内,a在,b排在后面
  if (bPriority === -1) return -1
  // 都在优先级内,按优先级索引从小到大排序
  return aPriority - bPriority
})

逻辑说明

  • 如果你需要基于flag字段匹配排序,只需要把sortPriority改为['AR', 'CL', 'US'],同时将a.code、b.code替换为a.flag、b.flag即可
  • 不在指定排序范围内的其他货币,默认保留原id的升序排列,你也可以根据需求调整该分支的排序规则,比如按label的字母序排序

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 11:54:01