具有针对角度json数组中的重复值的计数的下划线

时间:2014-03-11 10:01:39

标签: json angularjs count

任何人都可以告诉我如何将计数放在角度JSON数组中的重复值:

我的实际数组如下:

$scope.datas.resultsOrder =['Data1','Data2','Data3','Data3','Data4','Data4'];
上面的数组Data3中的

Data4重复两次,所以我需要它在该数组中以Data3_1, Data3_2, Data4_1, Data4_2顺序出现,如下所示:

$scope.datas.resultsOrder =['Data1','Data2','Data3_1',      
'Data3_2','Data4_1','Data4_2'];

该数组中的值还有动态值不是静态

有人可以告诉我一些解决方案吗?

2 个答案:

答案 0 :(得分:1)

你可以这样做:

function transform(arr) {
    var c = {};
    for (var i = 0; i < arr.length; i++) {
        var ar = arr[i];
        if(! (ar in c) ) {
            c[ar] = 0;
        }
        c[ar]++;
    }
    var res = []
    ;
    for(var d in c) {
        if(c.hasOwnProperty(d)) {
            var l = c[d]
            ;
            if(l === 1) {
                res.push(d);
                continue;
            }
            for(var i = 0; i < l; i++) {
                res.push(d + '_' + (i + 1));
            }
        }
    }
    return res;
}

$scope.datas.resultsOrder = transform(passTheArrayHere);

注意:不保证订单。

答案 1 :(得分:1)

我喜欢UnderscoreJS这些问题。在underscoreJS中,您可以执行以下操作:

function uniq(array) {
    var grouped = _.groupBy(array);

    return _.reduce(grouped, function(result, x) {
        if(x.length > 1) {
            _.each(x, function(val, key) {
                result.push(val + '_' + (key + 1));
            });
        } else {
            result.push(x[0]);
        }

        return result;
    },[]);
}

uniq(['Data1','Data2','Data3','Data3','Data4','Data4']);
// ["Data1", "Data2", "Data3_1", "Data3_2", "Data4_1", "Data4_2"]