[英]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.