繁体   English   中英

Javascript计数唯一数组出现

[英]Javascript count unique array occurrence

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

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

medium,small,medium,small,small

如何对结果进行排序,以便将输出表示为:

medium x 2,small x 3

编辑

addCount函数:

$scope.addCount = function($index){

        $scope.counter = 1;

        if($scope.activity['variant'][$index]['count'] != undefined ){

            $scope.counter = parseInt($scope.activity['variant'][$index]["count"]) +1;

            $scope.variantLists.push($scope.activity['variant'][$index]['variant_dtl_name']);

        }


        $scope.activity['variant'][$index]["count"] =  $scope.counter;

        console.log(arraySimplify($scope.variantLists));


    };

谢谢!

将你的 '$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(', ');
    }

您的代码正在运行:

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);

要获得您想要的确切字符串:

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

虽然它可能看起来像 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是因为在forEach循环中不能保证普通Object字典中的顺序。 这里r.forEach(function(v,k,m){console.log(k + ":" + v);})按插入顺序打印。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM