Sorting 两个属性Vuejs的排序数组

Sorting 两个属性Vuejs的排序数组,sorting,vue.js,Sorting,Vue.js,如何为两个属性(如“姓氏”-“名称”)对数组对象排序 我尝试了串联,但它不起作用,因为它只对第二次排序进行排序: computed:{ sortedArray: function() { function name(a, b) { if (a.name < b.name) return -1; if (a.name > b.name) return 1; return 0; } func

如何为两个属性(如“姓氏”-“名称”)对数组对象排序

我尝试了串联,但它不起作用,因为它只对第二次排序进行排序:

computed:{
   sortedArray: function() {
      function name(a, b) {
         if (a.name < b.name) return -1;
         if (a.name > b.name) return 1;

         return 0;
      }
      function surname(a, b) {
         if (a.surname < b.surname) return -1;
         if (a.surname > b.surname) return 1;
         return 0;
      }

      return this.users.sort(surname).sort(name);
   }
}
计算:{
SorterDarray:函数(){
函数名(a,b){
如果(a.nameb.name)返回1;
返回0;
}
函数姓氏(a,b){
如果(a.姓氏b.姓氏)返回1;
返回0;
}
返回此.users.sort(姓氏).sort(名称);
}
}
我也尝试过:

function surname(a, b) {
   return a.surname < b.surname || a.name < b.name
}
函数姓氏(a,b){
返回a.姓

但它返回的数组不是按姓氏/姓名排序的

实际上非常接近

问题是当您执行以下操作时:

return this.users.sort(surname).sort(name);
首先按
姓氏排序,然后按
姓名排序,忽略
姓氏

解决方案是使用一个同时处理两个属性的函数。因此,将这些排序函数合并为一个

另一件事是,您的计算机正在进行排序。您可能希望克隆数组并在computed属性中返回排序副本

newvue({
el:“#应用程序”,
数据:{
用户:[
{姓名:“约翰”,姓氏:“纳什”},
{姓名:“保罗”,姓氏:“普林格斯”},
{姓名:“鲍勃”,姓氏:“普林格斯”},
{姓名:“鲍勃”,姓氏:“艾比”},
{姓名:“爱丽丝”,姓氏:“艾比”},
]
},
计算:{
SorterDarray:函数(){
函数名(a,b){
如果(a.姓氏b.姓氏)返回1;
如果(a.nameb.name)返回1;
返回0;
}
//返回this.users.sort(姓氏);//就地排序
返回[…this.users].sort(姓氏);//浅克隆+排序
}
}
})

未排序:
{{users}

已排序:
{{sortedArray}


可能重复的可能重复的感谢,即使是为了解释!