Javascript计数唯一的数组出现

时间:2015-11-16 04:11:25

标签: javascript arrays

以下是由以下函数返回的数组的输出:

StringIndexOutOfBounds

$scope.variantOptions = $scope.variantLists.join(", ");

如何对结果进行排序,因此它将输出表示为:

medium,small,medium,small,small

修改

medium x 2,small x 3功能:

addCount

谢谢!

3 个答案:

答案 0 :(得分:1)

将'$ scope.variantLists'arry传递给此函数,它将为您提供预期的结果。

     function arraySimplify(arr){
        arr.sort();
        var rslt = [], element =arr[0] ,count = 0 ;

        if(arr.length === 0) return; //exit for empty array

        for(var i = 0; i < arr.length; i++){
            //count the occurences
            if(element !== arr[i]){
                rslt.push(element + ' x ' + count);
                count =1;
                element = arr[i];
            }
            else{
                count++;
            }
        }
        rslt.push(element + ' x ' + count);
        return rslt.join(', ');
    }

答案 1 :(得分:0)

您的代码正在运行:

for (var i = 0;i < $scope.variantLists.length;i++) {
    obj[arr[i]] = (obj[arr[i]] || 0) + 1; 
}

给你一个对象:

obj = {medium: 2, small: 3}

要在不必进入控制台的情况下查看它,您只需在'for'循环后提醒对象:

alert(obj);

获取所需的EXACT字符串:

var string = "";
for (var key in obj) {
   if (obj.hasOwnProperty(key)) {
       var count = validation_messages[key];
       string += key + " x " + count;
    }
}

答案 2 :(得分:0)

虽然它可能看起来像Code Golf中的一个条目,但这是Array.reduce有意义的罕见时期之一。

var r = a.sort().reduce(
                   function(A,i){
                     A.set(i, (!A.get(i))?1:A.get(i)+1);
                     return A;
                   },new Map());

这基本上是乔恩史蒂文斯所提出的,但却以更现代,更难以辨认的方式。我使用了Map,因为在Object循环中无法保证普通forEach字典中的顺序。此处r.forEach(function(v,k,m){console.log(k + ":" + v);})按插入顺序打印。