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

如何基于字符串参数指定的键对JavaScript对象数组进行排序?

解决方案

JavaScript 中对象属性支持两种访问方式:点语法仅支持固定字面量属性名,方括号语法可以传入字符串变量/表达式作为属性名,刚好匹配你当前的使用场景,直接把固定属性名替换为[filterType]即可:

// 降序排序,和原有逻辑效果一致,动态读取filterType指定的字段
this.products.sort((a, b) => parseFloat(b[filterType]) - parseFloat(a[filterType]));

如果需要支持升序/降序切换,可以再扩展一个排序方向参数,封装成通用的排序方法:

/**
 * 对象数组排序方法
 * @param {string} filterType 排序字段名
 * @param {string} order 排序方向,可选值 'asc'(升序) / 'desc'(降序)
 * @returns {Array} 排序后的数组(如需不修改原数组可先浅拷贝)
 */
function sortByField(filterType, order = 'asc') {
  // 如需不修改原数组,替换为 return [...this.products].sort(...)
  return this.products.sort((a, b) => {
    const numA = parseFloat(a[filterType])
    const numB = parseFloat(b[filterType])
    return order === 'asc' ? numA - numB : numB - numA
  })
}

// 调用示例:按pricePerDay降序排序
sortByField('pricePerDay', 'desc')

补充说明

  • 如果你能确保要排序的字段值本身就是Number类型,可以去掉parseFloat转换逻辑
  • 原生sort方法是原地修改数组,如果需要保留原数组的原始顺序,可以先对数组做浅拷贝再排序,写法为[...this.products].sort(...)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.12 08:03:03