簡體   English   中英

根據名稱和順序參數在 JavaScript 中對數組進行排序

[英]Sort array in JavaScript based on name and order parameter

在我當前的項目中,我必須根據特定的排序參數對一組對象進行排序:

順序(向上/向下),

和排序類型(名稱、描述、類別)。

因此,我使用語法sort = [type, order]創建了一個排序數組。

現在我想根據排序類型和順序對我的對象數組進行排序。 我目前的實現是:

  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;
},

我的排序數組更改如下:

  changeSort(sort, order) {
      if (this.sort[0] == sort && this.sort[1] == order) {
        this.sort = [];
      } else {
        this.sort = [sort, order];
      }

我的對象數組包括:

[{ category: "test2",
description: "adadad",
name: "adadadadad"
},
{
category: "test",
description: "my description",
name: "NewAccount"
​​​},
{
category: "test",
description: "My other description",
​​​name: "another new account"
}]

目前它不能正常工作,它只是對兩個元素進行排序,而其他元素則保持不變。

你可以使用 Lodash 的 orderBy 函數作為下面的例子:

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

我會簡化您的代碼並提出一個問題 - 您是否返回list 也許你可以提供一個完整的方法,甚至是完整的工作示例。

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))
           }
        });
     }
   }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM