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

JavaScript模板字面量转动态对象冗余引号问题及Mongoose排序需求

问题原因与解决方案

多余引号产生的原因

问题出在你模板字符串中额外添加的单引号:

mongooseFilters = sort.items.map(i => ({[`'${i.field}'`] : i.sortOption == SortOption.ASC ? 1 : -1}))

你用'${i.field}'给字段名手动包裹了一层单引号,导致生成的对象键变成了带单引号的字符串(比如"'name'"),这就是结果中出现多余引号的直接原因。

修正方案

1. 先修正数组生成逻辑

去掉模板字符串里的单引号,直接将字段名作为对象键:

const mongooseFilters = sort.items.map(i => ({
  [i.field]: i.sortOption === SortOption.ASC ? 1 : -1
}));

此时生成的数组就是你预期的格式:

[ { 'name': 1 }, { 'surname': -1 }, { 'customerType': -1 } ]

2. 合并为单个排序对象

你的reduce写法可以正常工作,但建议添加初始空对象避免空数组报错:

const result = mongooseFilters.reduce((acc, curr) => ({...acc, ...curr}), {});

或者更高效的方式,跳过中间数组直接构建最终对象:

const result = sort.items.reduce((acc, i) => {
  acc[i.field] = i.sortOption === SortOption.ASC ? 1 : -1;
  return acc;
}, {});

最终会得到你想要的格式:

{ 'name': 1, 'surname': -1, 'customerType': -1 }

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 23:24:56