如何基于字符串参数指定的键对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
相关产品推荐
相关产品推荐

