在angularJS中随机排列对象数组

时间:2018-09-27 14:25:36

标签: javascript angularjs

我的自定义angularJS过滤器中有对象数组。对象数组具有具有boolen true和false属性的功能键。我得到具有所有特征真实值的对象。现在,我想重新整理精选的真实对象数据。但是不幸的是,它给了我无限的错误。

我的代码:

   app.filter('sortFilter', ['$filter', function ($filter) {
   return function (items, sort) {
      var onlyFeatured = [];
            angular.forEach(items, function (item, key) {
                if(item['featured'] == true) {
                    onlyFeatured.push(items[key]);
                } 
            });
            onlyFeatured.sort(function() { return 0.5 - Math.random(); 
            });
            return onlyFeatured; 
       };
});

请帮助摆脱摘要错误。

1 个答案:

答案 0 :(得分:1)

根本原因:您的过滤器在每个摘要周期返回新的数组。然后angularjs对每个观察值执行脏检查。由于获取新数组,因此它将再次运行摘要。并得到另一个数组。而且...这发生了some_limit_typically_10次,然后失败了。

因此不可能将randomizer实现为angularjs过滤器。

相反,您需要将其洗净一次,然后将其插入到$scope或控制器的this变量中

[UPD]我错了,就是.sort不会使原始数组变异。确实如此,对于错误消息,我们深表歉意。但是无论如何,这无济于事。