我试图计算日期数组中的重复项并将它们添加到新数组中。
但我只能获得重复数据以及它们在数组中存在的次数。
我想要的是:
[a, a, b, c, c]
=> [a: 2, b: 1, c: 2]
代码:
$scope.result = { };
for(var i = 0; i < $scope.loginArray.length; ++i) {
if(! $scope.result[$scope.loginArray[i]]){
$scope.result[$scope.loginArray[i]] = 0;
++ $scope.result[$scope.loginArray[i]];}
}
有什么建议吗?
答案 0 :(得分:2)
您可能需要一个对象,而不是数组。所以你正在做的事情已经很好了,但if
条件正在搞乱:
$scope.result = {};
for (var i = 0; i < $scope.loginArray.length; ++i) {
if (!$scope.result[$scope.loginArray[i]])
$scope.result[$scope.loginArray[i]] = 0;
++$scope.result[$scope.loginArray[i]];
}
<强>段强>
var a = ['a', 'a', 'b', 'c', 'c'];
var r = {};
for (var i = 0; i < a.length; ++i) {
if (!r[a[i]])
r[a[i]] = 0;
++r[a[i]];
}
console.log(r);
&#13;
或者更好的方式是,您可以像其他人一样使用.reduce
。一个简单的reduce
函数将是:
var a = ['a', 'a', 'b', 'c', 'c'];
var r = a.reduce(function(c, e) {
c[e] = (c[e] || 0) + 1;
return c;
}, {});
console.log(r);
&#13;
答案 1 :(得分:2)
您可以使用reduce
并返回对象
var ar = ['a', 'a', 'b', 'c', 'c'];
var result = ar.reduce(function(r, e) {
r[e] = (r[e] || 0) + 1;
return r;
}, {});
console.log(result)
&#13;
您也可以先创建Object,然后使用forEach
添加属性和增量值
var ar = ['a', 'a', 'b', 'c', 'c'], result = {}
ar.forEach(e => result[e] = (result[e] || 0)+1);
console.log(result)
&#13;
答案 2 :(得分:2)
为此,您可以使用.reduce
:
var arr = ['a','a', 'b', 'c', 'c'];
var result = arr.reduce(function(p,c){
if(p[c] === undefined)
p[c] = 0;
p[c]++;
return p;
},{});
console.log(result);
答案 3 :(得分:1)
lodash
&#39; countBy
功能可以解决问题:
_.countBy(['a', 'a', 'b', 'c', 'c'])
将评估为:{a: 2, b: 1, c: 2}
它确实涉及添加lodash
作为依赖项。
答案 4 :(得分:0)
我会喜欢这个
var arr = ["a", "a", "b", "c", "c", "a"],
red = arr.reduce((p,c) => (p[c]++ || (p[c]=1),p),{});
console.log(red);
&#13;