过滤对象数组中的总重复项

时间:2014-04-16 17:38:11

标签: javascript angularjs firebase

我已创建此过滤器:

app.filter('totalItems', function() { 

    return function (input) { 
        var total = [];
        input.forEach(function (value, key) {
            if (total.length > 0) {
                for (var i in total) {
                    if (input[key].descripcion == total[i].descripcion) { // 'descripcion' is an String
                        total[i].cantidad += 1; // 'cantidad' is a Number
                    } else {
                        total.push(input[key]);
                    }
                }
            } else {
                total.push(input[key]);
            }   
        });
        return total; // It's returning just an empty array. Why?
    }
});

对于这个观点:

<table>
<tr>
    <th>Descripcion</th>
    <th>Precio</th>
    <th>Cantidad</th>
</tr>
<tr ng-repeat="(key, value) in tempCart | orderByPriority | totalItems">
    <td class="ar"> {{ value.descripcion }} </td>
    <td> {{ value.precio | currency: 'BsF.' }}</td>
    <td> {{ value.cantidad }} </td>
</tr>

使用此控制器:

app.controller('cartController', ['$scope', '$firebase', function(sp, fb) {

    var userSessionRef = new Firebase('https://XXXXX.firebaseio.com/development/user_sessions/uid/');
    sp.tempCart = fb(userSessionRef);
}]);

(The reference looks like this)

过滤器的想法是对类似的项进行求和并返回一个带有总数的数组;如果有三个对象有1个苹果,则过滤器应返回带有3个苹果的一个对象。但我的尝试都没有成功。

可能出现什么问题?

先谢谢。

修改

Thanks to this,我已经将过滤器更改为最简单的过滤器:

app.filter('totalItems', function() {

    return function (input) { 

        var output = [],
        found,
        x = 0, 
        y = 0;

        for ( x = 0; x < input.length; x++ ) {
            found = undefined;
            for ( y = 0; y < output.length; y++ ) { 
                if ( input[x].id === output[y].id ) {   
                    output[y].cantidad += 1; // This line is causing a "$digest() iterations reached" error.
                    found = true;
                } 
            }
            if ( !found) {
                output.push( input[x] );
            }
        }
        return output;
    }    
});

该功能效果很好但不是过滤器;它产生了这个错误:

  

错误:$ rootScope:infdig   无限$ digest循环

即使我已经阅读this explanation,我还没有找到解决问题的方法......老实说,我不知道我能做些什么。

0 个答案:

没有答案