在我当前的项目中,我必须根据特定的排序参数对对象数组进行排序:
订单(上行/下行(,
以及排序类型(名称、说明、类别(。
因此,我创建了一个语法为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))
}
});
}
}
}