以下是由以下函数返回的数组的输出:
StringIndexOutOfBounds
$scope.variantOptions = $scope.variantLists.join(", ");
如何对结果进行排序,因此它将输出表示为:
medium,small,medium,small,small
修改
medium x 2,small x 3
功能:
addCount
谢谢!
答案 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);})
按插入顺序打印。