Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何根据AngularJS中的子结果集对结果排序_Javascript_Angularjs_Underscore.js - Fatal编程技术网

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,以更好的格式返回数据,就像你说的,简单是最好的方式!这无疑使管理前端排序和筛选变得更容易!