首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于名称和顺序参数的JavaScript中的排序数组

问基于名称和顺序参数的JavaScript中的排序数组
EN

Stack Overflow用户
提问于 2020-11-09 16:11:17
回答 2查看 57关注 0票数 0

在我当前的项目中,我必须根据特定的排序参数对对象数组进行排序:

顺序(向上/向下),

以及排序类型(名称、描述、类别)。

因此,我创建了一个使用语法sort = [type, order]的排序数组。

现在,我想根据排序类型和顺序对对象数组进行排序。我目前的实现是:

代码语言:javascript
复制
  computed: {
accountsList() {
  var list = this.$store.getters["accounts/accountsList"];
  if (this.$route.query.fave) {
    list = list.filter((x) => x.fave == true);
  } else if (this.$route.query.my) {
    //my
  }
  if (this.sort.length != 0) {
    list = list.sort((a, b) => {
      if (this.sort[1] == "up") {
        if (a[this.sort[0]] < b[this.sort[0]]) {
          return 1;
        }
        if (a[this.sort[0]] > b[this.sort[0]]) {
          return -1;
        }
        return 0;
      } else {
        if (a[this.sort[0]] < b[this.sort[0]]) {
          return -1;
        }
        if (a[this.sort[0]] > b[this.sort[0]]) {
          return 1;
        }
        return 0;
      }
    });
  }
  return list;
},

我的排序数组如下所示:

代码语言:javascript
复制
  changeSort(sort, order) {
      if (this.sort[0] == sort && this.sort[1] == order) {
        this.sort = [];
      } else {
        this.sort = [sort, order];
      }

我的对象数组包括:

代码语言:javascript
复制
[{ category: "test2",
description: "adadad",
name: "adadadadad"
},
{
category: "test",
description: "my description",
name: "NewAccount"
​​​},
{
category: "test",
description: "My other description",
​​​name: "another new account"
}]

目前它不能正常工作,它只对两个元素进行排序,而对其他元素保持不变。

EN

回答 2

Stack Overflow用户

发布于 2020-11-09 16:36:12

您可以使用Lodash的orderBy函数,如下所示:

代码语言:javascript
复制
var users = [
  { 'user': 'fred',   'age': 48 },
  { 'user': 'barney', 'age': 36 },
  { 'user': 'fred',   'age': 40 },
  { 'user': 'barney', 'age': 34 }
];
 
_.orderBy(users, ['user', 'age'], ['asc', 'desc']);

进一步参考:https://lodash.com/docs/4.17.15#orderBy

票数 1
EN

Stack Overflow用户

发布于 2020-11-09 16:28:56

我会简化你的代码,并问你一个问题--你返回list吗?也许你可以提供一个完整的方法,甚至是完整的工作示例。

代码语言:javascript
复制
export {
  data() {
    list: []
  },
  methods: {
    sortList() {
      if (this.sort.length != 0) {
        let col = this.sort[0] || 'id', // default col
            dir = this.sort[1];

        this.list = this.list.sort((a, b) => {
           let colA = a[col], 
               colB = b[col];
     
           if (dir == "up") {
             return (colA  < colB ? 1 : (colA  > colB ? -1 : 0))
           } else {
             return (colA  < colB ? -1 : (colA  > colB ? 1 : 0))
           }
        });
     }
   }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64747877

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档