如何整理由 vuetify options.sortBy 和 sortDesc 生成的两个 javascript 数组以推送到 mongodb 聚合管道?

发布于 2025-01-09 11:24:46 字数 506 浏览 0 评论 0原文

给定 vuetify 表 options.sortBy 和 sortDesc 生成的两个 javascript 数组:

options.sortBy = ['name', 'email'];  // fields to sort
options.sortDesc = [ false, true ];  // whether to sort field descending

期望的结果:

sort = { $sort: { name: -1, email: 1 } };

这样我们就可以推送到 mongodb 聚合管道数组,如:

pipeline.push(sort);

此分支

Given the two javascript arrays produced by the vuetify table options.sortBy and sortDesc:

options.sortBy = ['name', 'email'];  // fields to sort
options.sortDesc = [ false, true ];  // whether to sort field descending

Desired result:

sort = { $sort: { name: -1, email: 1 } };

So that we can push into mongodb aggregate pipeline array like:

pipeline.push(sort);

Code available in this branch.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

横笛休吹塞上声 2025-01-16 11:24:46

它最终成为 reduce 的一个很好的例子。这就是我最终得到的结果:

type SortValue = 'asc' | 'desc' | 'ascending' | 'descending' | 1 | -1;

let sort:{[key:string]:SortValue} =
  query.sortBy === undefined ||
  query.sortDesc === undefined ? undefined :
  query.sortBy.split(',').reduce((sort:{[key:string]:SortValue}, field:SortValue, index:number) => {
    const sortDesc = query.sortDesc.split(',')[index];
    const sortValue = !!(parseInt(sortDesc) || sortDesc === "true") ? 1 : -1;
    sort[field] = sortValue;
    return sort;
  }, {});

pagination.sort = sort;

接受改进/变体。谢谢!

代码可在此分支中找到。

It ends up being a good case for reduce. Here's what I ended up with:

type SortValue = 'asc' | 'desc' | 'ascending' | 'descending' | 1 | -1;

let sort:{[key:string]:SortValue} =
  query.sortBy === undefined ||
  query.sortDesc === undefined ? undefined :
  query.sortBy.split(',').reduce((sort:{[key:string]:SortValue}, field:SortValue, index:number) => {
    const sortDesc = query.sortDesc.split(',')[index];
    const sortValue = !!(parseInt(sortDesc) || sortDesc === "true") ? 1 : -1;
    sort[field] = sortValue;
    return sort;
  }, {});

pagination.sort = sort;

Open to improvements/variants. Thanks!

Code available in this branch.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文