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

Posted

技术标签:

【中文标题】如何根据 Aurelia/Typescript 中的嵌套属性对对象数组进行排序【英文标题】:How to sort the array of objects based on nested property in Aurelia/Typescript 【发布时间】:2019-07-11 19:02:47 【问题描述】:

我必须按对象的嵌套属性对对象数组进行排序。更准确地说,我必须根据 payment.paymentDate 属性对派生自 service.payments 对象的 payment 进行排序。

有没有办法自定义排序转换器代码或修改html,以便我可以根据paymentDate对付款进行排序?

详情请看下面的代码:

这是 HTML 代码:

<ul>
  <li repeat.for="payment of service.payments | sort:payment.paymentDate:'ascending'">
    $'dashboard:contracts.desc.custPayment' & t: 
        value: payment.value,
        currency: payment.currency,
        date: formatDate(payment.paymentDate)
    
  </li>
</ul>

这是我的 SortValueConverter 代码:

export class SortValueConverter 
toView(array: [], property: string, direction: string) 

let sorted = [].slice.call(array).sort((a, b) => 
  if (a[property] > b[property]) return 1;
  if (a[property] < b[property]) return -1;
  return 0;
  );
  return direction === 'ascending' ? sorted : sorted.reverse();
  

这是数据:

【问题讨论】:

【参考方案1】:

根据您在下面提供的排序 valueConverter,您的 HTML 应如下所示:

<li repeat.for="payment of service.payments | sort:'paymentDate':'ascending'">
    $'dashboard:contracts.desc.custPayment' & t: 
        value: payment.value,
        currency: payment.currency,
        date: formatDate(payment.paymentDate)
    
</li>

aslo:为什么不经常使用数组排序函数?

export class SortValueConverter 
toView(arr: any[], property: string, direction: string) 

  const sorted = arr.sort((a, b) => a[property] - b[property]));
  return direction === 'ascending' ? sorted : sorted.reverse();
  

【讨论】:

如果你看一下我刚刚上传的数据截图,你会发现 sort:'paymentDate':'ascending' 不起作用。同样关于您的第二个建议,它不起作用,因为参数没有切片方法,因此需要转换为数组。但是感谢您的帮助:) 您要比较日期吗?但是您的数据中有字符串。首先将数据转换为日期,然后排序将起作用。 service.payments 是一个数组 - 所以你不需要切片.. 只需正常排序即可。事实上:您的问题并不是真正的 aurelia 问题,而是了解您拥有的确切数据结构。 不幸的是,您提供的解决方案不起作用,我测试并尝试了所有方案。如果我不使用 [].slice.call(array) 我会得到 "array.sort is not a function error" ,所以这可以解决问题。关于数据,我正在比较字符串,这些字符串稍后会格式化为日期并显示。我认为唯一的问题是我试图通过在迭代 service.payments 的同一行上的嵌套属性进行排序,所以我的排序逻辑需要以某种方式进行修改,或者我的 HTML 应该被扩展/格式化不同。

以上是关于如何根据 Aurelia/Typescript 中的嵌套属性对对象数组进行排序的主要内容,如果未能解决你的问题,请参考以下文章

从Aurelia依赖注入容器中显式请求新实例

python 数组中如何根据值,获取索引,如何根据索引删除值 , 以及如何根据值删除值

如何根据列值从 DataFrame 中选择行?

如何根据列值从 DataFrame 中选择行?

如何根据列值从 DataFrame 中选择行?

怎样根据姓名匹配对应数据,Excel如何从一个表中分类提取另一个表对应