如何根据 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 中的嵌套属性对对象数组进行排序的主要内容,如果未能解决你的问题,请参考以下文章