Vuejs2 在Vue.js中对数组排序

Vuejs2 在Vue.js中对数组排序,vuejs2,Vuejs2,在v-for循环中显示数组之前,如何按名称或性别对数组进行排序? {{array.name} //Vue.js v。2.1.8 变量字符串=新的Vue({ el:“#字符串”, 数据:{ 阵列:[ {名字:'卡诺',性别:'男人'}, {姓名:'前锋',性别:'男人'}, {姓名:'sonya',性别:'woman'}, {姓名:'sindell',性别:'woman'}, {姓名:'subzero',性别:'man'} ] } }) 我必须使用“computed”或其他什么吗?是的

在v-for循环中显示数组之前,如何按名称或性别对数组进行排序?


  • {{array.name}
//Vue.js v。2.1.8
变量字符串=新的Vue({
el:“#字符串”,
数据:{
阵列:[
{名字:'卡诺',性别:'男人'},
{姓名:'前锋',性别:'男人'},
{姓名:'sonya',性别:'woman'},
{姓名:'sindell',性别:'woman'},
{姓名:'subzero',性别:'man'}
]
}
})

我必须使用“computed”或其他什么吗?

是的,一种简单的方法是创建一个computed属性,该属性可以返回SorterDarray,如下所示:

计算:{
SorterDarray:函数(){
功能比较(a、b){
如果(a.nameb.name)
返回1;
返回0;
}
返回this.arrays.sort(比较);
}
}
见工作

您可以找到采用比较函数的排序文档

compareFunction指定定义排序顺序的函数。如果省略,则根据每个字符的Unicode代码点值以及每个元素的字符串转换对数组进行排序


使用箭头功能es6:

sortedArray(){
    return this.arrays.sort((a, b) => a.name - b.name );
}

Html端

<div id="string">
      <ul>
        <li v-for="array in sortArrays(arrays)">{{ array.name }}</li>
      </ul>
    </div>
  • 在orderBy函数中,第一个参数是数组,第二个参数是键(name/sex),第三个参数是顺序(asc/desc)
    • 简易方法; 您可以使用computedArray而不是array

      computed: {
      computedFonksiyon() {
        this.arrays.sort(function(x, y) {
          return y.name- x.name;
        });
        return this.arrays;
      }
      }
      

      这真的很酷:

      sortFunc: function (){
        return this.arrays.slice().sort(function(a, b){
          return (a.name > b.name) ? 1 : -1;
        });
      }
      
      从HTML调用函数:

      <div id="string">
       <ul>
         <li v-for="array in sortFunc()">{{ array.name }}</li>
       </ul>
      </div>
      
      
      
      • {{array.name}

      您可以尝试创建一个getter方法,在返回之前对数组进行排序。编辑:看起来这可能正是您所指的计算机。请参阅此处的文档:@Christopher谢谢。我想学习纯vue,也许vuex对我来说太难了…我想你需要确保在设置数据时对数据进行预排序。从技术上讲,您甚至可以执行以下操作:{arrays:[3,2,1].sort()}。注意:您需要使用带有回调的排序函数来按对象属性进行排序。请尝试在反转之前使用筛选器:我可以问您另一个问题吗?为什么这里使用两个函数?第二个函数如何知道到底需要向A传递什么,向B传递什么?@user3798618请查看添加的详细信息,如果有问题,请告诉我。我必须向A.name和B.name添加.toUpperCase(),以确保它不会以大写字母开头,以小写字母结尾。在这里,计算属性有一个副作用,this.arrays按位置排序,因此this.arrays和this.sortedArray共享相同的引用。如果要使用计算属性,应克隆数组并对其排序。如果要直接对this.arrays进行排序,请使用观察程序。出现了一个带有意外副作用的错误。为避免此问题,请复制主阵列。vue将投诉。例如:this.arrays.slice().sort(compare);是否有类似的简明方法按相反顺序对其进行排序?是的,只需使用小于运算符a.name进行反向排序。请注意,
      只返回0(等于)或1(大于),而排序比较函数必须返回负、零或正,否则排序将无效。对数字使用
      -
      而不是
      -
      (a,b)=>a-b
      ,或者使用
      if
      或任何东西编写有效的比较函数。(请参见MDN上的排序:)
      a-b不适用于字符串,因为它返回
      NaN
      。答案是错误的。您的函数是从for循环调用的,因此对于数组中的每个项,是否会对您的函数进行评估从而影响性能?您好,感谢这对我来说效果很好,我使用return(a.ID<div id="string"> <ul> <li v-for="array in sortFunc()">{{ array.name }}</li> </ul> </div>