gpt4 book ai didi

javascript - 如何使用带有键|值对的 ng-repeat 进行排序

转载 作者:行者123 更新时间:2023-11-29 19:18:23 25 4
gpt4 key购买 nike

我试图按照最后一条消息的顺序为我的应用程序列出一些消息传递线程(以便较新的消息位于顶部)并且我在使用 orderBy 时遇到了一些问题Angular 自带的过滤器。

这是我们正在排序的对象的示例。

$scope.messageThreads = { 
'102842': {
name: 'John Doe',
avatar: 'http://directlink/img.png',
last_message: 5,
messages: [
{ content: 'Hello!', from: '102842', to: '312124', date: 5 }
]
},
'59251275': {
name: 'Thomas Doe',
avatar: 'http://directlink/img.png',
last_message: 28,
messages: [
{ content: 'Hey jack', from: '59251275', to: '1231251', date: 12 },
{ content: 'Hey Thomas', from: '1231251', to: '59251275', date: 28 }
]
}
}

存储在一个名为 messageThreads 的简单对象中。

在 HTML 文档中,我们在键/值对中循环这些,如下所示:

<div ng-repeat="(id, thread) in messageThreads | orderBy: '-thread.last_message'">
Thread ID: {{id}} - Last message: {{thread.last_message}}
</div>

不幸的是,它根本没有对消息进行排序。显示的输出是:

Thread ID: 102842 - Last message: 5
Thread ID: 59251275 - Last message: 28

但是,应该是:

Thread ID: 59251275 - Last message: 28
Thread ID: 102842 - Last message: 5

-thread.last_message 更改为 thread.last_message 并不能解决问题。

最佳答案

这是解决方案,但有一个问题是它将项目对象转换为数组,您将无法再访问“关联数组”的键,就像您对 (项目片段中的键,项目)

   app.filter('orderObjectBy', function() {
return function(items, field, reverse) {
var filtered = [];
angular.forEach(items, function(item,key) {
**item.key = key;** //Here you can push your key to get in returned Object
filtered.push(item);
});
filtered.sort(function (a, b) {
return (a[field] > b[field] ? 1 : -1);
});
if(reverse) filtered.reverse();
return filtered;
};
});

在 HTML 中:

<div ng-repeat="(id, thread) in messageThreads | orderObjectBy:'last_message':true">
Thread ID: {{thread.key}} - Last message: {{thread.last_message}}
</div>

关于javascript - 如何使用带有键|值对的 ng-repeat 进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34176987/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com