Vue.js - 如何按特定属性对数组中的对象进行排序并使用“v-for”进行渲染

Posted

技术标签:

【中文标题】Vue.js - 如何按特定属性对数组中的对象进行排序并使用“v-for”进行渲染【英文标题】:Vue.js - how to sort and objects inside the array by particular property and render it with "v-for" 【发布时间】:2019-08-17 08:42:24 【问题描述】:

我有一个数组,里面有一些对象。每个对象都包含一些属性。

我使用 vue.js v-for 方法在列表中渲染它。

但我无法按照给定属性的特定顺序呈现它。我使用此函数对其进行升序排序:

    evenNumbers: function () 
      return this.numbers.sort(function (a, b)  return a - b );
    

它适用于像 [22, 1, 2, 3, 4, 5] 这样的简单数组。但它不适用于这样的对象:

      numbers2: [
      
        name: 'Alan',
        age: 72
      , 
      
        name: 'Thomas',
        age: 32
      , 
      
        name: 'Thomas',
        age: 32
      , 
      
        name: 'Michal',
        age: 32
      ,
    ]
  

我想按年龄升序对它们进行排序。

最后我想在 li 中渲染它们,例如只有 age 属性。

这是我的代码的 sn-p: https://jsfiddle.net/marektchas/jyznx475/2/

【问题讨论】:

【参考方案1】:

由于您现在有复杂的对象,因此直接按对象排序不会像您预期的那样工作(运算符运行一些隐式转换,每次比较都会产生NaN)。

您必须按特定属性排序,在本例中为age。所以:

    evenNumbers2: function () 
      return this.numbers2.sort(function (a, b)  return a.age - b.age );
    

见updated fiddle。

【讨论】:

但是现在如何在 中渲染,例如只有 age 属性? 您需要做的就是在模板中使用点符号:<li v-for="n in evenNumbers2"> n.name 's age is n.age !</li> 参见小提琴:jsfiddle.net/acdcjunior/5knh47yg/2

以上是关于Vue.js - 如何按特定属性对数组中的对象进行排序并使用“v-for”进行渲染的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Vue.js 2 按日期对数组进行排序

如何使用 Vue.js 为数组(数据)中的所有对象添加属性?

按对象属性对 javascript 对象数组进行排序

如何根据 Aurelia/Typescript 中的嵌套属性对对象数组进行排序

按数组中的多个属性对对象进行分组,然后将它们的值相加

vue.js:如何从数组中的对象进行计算?