Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.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 如何在Angular JS ng repeat中对1:1对象贴图进行排序_Javascript_Angularjs_Angularjs Ng Repeat_Angularjs Orderby - Fatal编程技术网

Javascript 如何在Angular JS ng repeat中对1:1对象贴图进行排序

Javascript 如何在Angular JS ng repeat中对1:1对象贴图进行排序,javascript,angularjs,angularjs-ng-repeat,angularjs-orderby,Javascript,Angularjs,Angularjs Ng Repeat,Angularjs Orderby,有没有办法在ng repeat块中使用过滤器(或任何其他方法)对angular.js中的1:1对象贴图进行排序 我有: obj:{ a:3, c:5, d:1, g:15 } 基本上,我希望能够做到以下几点: <div ng-repeat="item in obj | orderBy:'value'"> {{ item.value }}</div> <div ng-repeat="item in obj | toArray

有没有办法在ng repeat块中使用过滤器(或任何其他方法)对angular.js中的1:1对象贴图进行排序

我有:

obj:{
     a:3,
     c:5,
     d:1,
     g:15
}
基本上,我希望能够做到以下几点:

<div ng-repeat="item in obj | orderBy:'value'"> {{ item.value }}</div>
<div ng-repeat="item in obj | toArray | orderBy:'value'"> {{ item.value }}</div>
然后我可以用这样的东西:

<div ng-repeat="item in obj | orderBy:'value'"> {{ item.value }}</div>
<div ng-repeat="item in obj | toArray | orderBy:'value'"> {{ item.value }}</div>
{{item.value}
但是,任何编写此类筛选器的尝试都会产生“10$digest()迭代次数”。流产错误,因为它会在每次迭代时更新新的对象数组


在不必重新构造控制器中的数据的情况下,排序1:1对象映射的最佳(或任何)解决方案是什么?

您是否考虑过最初在控制器中这样创建阵列

$scope.items = [];
for(var key in obj) {
    if(obj.hasOwnProperty(key)) {
        $scope.items.push({ key: key, value: obj[key] });
    }
}
然后迭代

<div ng-repeat="item in items|orderBy:'value'">{{ item.value }}</div>
{{item.value}
至少您只填充了一次数组。如果初始对象来自某个请求或其他东西,这可能是一个问题,但我想您可以很容易地填充到所述请求的回调中。

尝试将下划线函数引入angular.js。然后您可以编写如下代码:

<div ng-repeat="item in values(obj) | orderBy:identity"> {{ item }}</div>
{{item}
只获得价值;或

<div ng-repeat="item in pairs(obj) | orderBy:last"> Key: {{ item[0] }}; Value: {{item[1]}}</div>
键:{{item[0]};值:{{item[1]}
获取键和值


这真的很容易。Plunker here:

请将代码提供给您的
toArray
过滤器,以便我们从那里开始。黑暗中的刺杀:你的
toArray
是否正确处理循环?一些AngularJS对象有循环。目前这是我唯一的解决方案…在控制器中完成。我希望有一种方法可以做到这一点。这样构造的不仅仅是一个对象,因此我必须通过控制器中的函数运行每个对象。不是一个交易破坏者,但它看起来更干净,只是在视图中通过一个过滤器。您可能会以某种方式将其作为过滤器或指令来执行,但这对性能并不是很好。我想它会在每次触发观察者时不断评估它,所以每次都会生成该数组。也许只是做一个服务,你注入到你的控制器来做到这一点?(像Utils.somehelper)这看起来很有希望,我看到它按值从最低到最高排列列表。你会如何颠倒顺序?…从最高值到最低值value@user1394625只需像这样添加
:reverse
参数:
{{{item}
。您可以参考AngularJS文档了解更多信息。