Javascript 如何根据AngularJS中的子结果集对结果排序
鉴于我有以下目标:Javascript 如何根据AngularJS中的子结果集对结果排序,javascript,angularjs,underscore.js,Javascript,Angularjs,Underscore.js,鉴于我有以下目标: { "bands": [{ "name": "The Wibbles", "formed": 1992, "albums": [{ "name": "A New Wibble", "songs": [{ "name": "Song One", "time": "3:12" }, {
{
"bands": [{
"name": "The Wibbles",
"formed": 1992,
"albums": [{
"name": "A New Wibble",
"songs": [{
"name": "Song One",
"time": "3:12"
}, {
"name": "Song Two",
"time": "2:34"
}, {
"name": "Song Three",
"time": "2:21"
}, {
"name": "Song Four",
"time": "3:44"
}, {
"name": "Song Five",
"time": "3:54"
}]
}, {
"name": "The Wibbles Strike Back",
"songs": [{
"name": "Song Six",
"time": "8:12"
}, {
"name": "Song Seven",
"time": "7:34"
}, {
"name": "I Killed a Girl",
"time": "8:21"
}, {
"name": "Monkey Fighters",
"time": "7:44"
}, {
"name": "Funkallica",
"time": "9:54"
}]
}]
}]
}
使用AngularJS(可能还有下划线.js),我将如何按最短曲目、专辑总长度或专辑曲目的最短平均长度来订购专辑
如果我要添加另一个乐队,我将如何通过这些过滤器对乐队进行排序(最短曲目/专辑长度/平均曲目长度)?对数字字符串进行排序是一种痛苦,但我们仍然可以解决它。以下是给出以下html的示例:
{{band.name}
{{album.name}
-
{{song.name}
{{song.time}
现在,按最短音轨订购相册:
{{band.name}
{{album.name}
-
{{song.name}
{{song.time}
如您所见,为了执行自定义的orderBy
,我们需要在当前范围
上传递函数(而不是函数的结果),该函数将用于返回正在排序的值;在本例中为“orderBy:shortestTrackByAlbum”
$scope.bands=[…];
$scope.shortestTrackByAlbum=函数(相册){
var时间=[];
对于(var i=0;i
根据您提供的数据,我将您的时间转换为秒,以找出曲目中最小的秒数。然后将此最小数字与其他相册的最小数字进行比较,以对所有这些最小数字进行排序(请原谅冗余)
使用此模式,您应该能够为每种情况编写一个函数。请参见下面的一个简单示例
此外:如果您希望用户能够更改排序,可以实现如下操作:
...
...
$scope.methods=[
{
名称:“最短轨道”,
fn:$scope.shortestTrackByAlbum
},
{
名称:'相册总长度',
fn:$scope.totalAlbumLength按相册
},
{
名称:“最短平均长度”,
fn:$scope.shortestAverageLengthByAlbum
}
];
$scope.shortestTrackByAlbum=函数(相册){…};
$scope.totalAlbumLengthByAlbum=函数(相册){…};
$scope.shortestAverageLengthByAlbum=函数(相册){…};
请确保并更具体地查看上的文档。自定义
orderBy
函数中,orderBy
子句可以采用数组ng repeat=“items in items | orderBy:[myFunc1,myFunc2,…]
是否愿意写一个答案,这样我就可以给你一个真实的声誉?请看:太棒了,我一直在学习,我在阅读Angular文档,在发布我的问题之前,不知道如何解决我的问题,我拥有的实际用例比这个要复杂得多,但我发现学习如何做一个简单版本的w我想做的是,我可以自己计算其余部分,关于更改排序的最后一点实际上也包括了我下一步要做的事情,所以非常感谢你!谢谢,@Andrewills,没问题!简单的第一步通常是最好的方法。祝你好运!我最终重新编写了后端API,以更好的格式返回数据,就像你说的,简单是最好的方式!这无疑使管理前端排序和筛选变得更容易!