Javascript计数重复和唯一,并添加到数组

时间:2016-06-07 09:06:17

标签: javascript arrays

我试图计算日期数组中的重复项并将它们添加到新数组中。

但我只能获得重复数据以及它们在数组中存在的次数。

我想要的是:

[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]];}
    }

有什么建议吗?

5 个答案:

答案 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]];
}

<强>段

&#13;
&#13;
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;
&#13;
&#13;

或者更好的方式是,您可以像其他人一样使用.reduce。一个简单的reduce函数将是:

&#13;
&#13;
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;
&#13;
&#13;

答案 1 :(得分:2)

您可以使用reduce并返回对象

&#13;
&#13;
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;
&#13;
&#13;

您也可以先创建Object,然后使用forEach添加属性和增量值

&#13;
&#13;
var ar = ['a', 'a', 'b', 'c', 'c'], result = {}
ar.forEach(e => result[e] = (result[e] || 0)+1);
console.log(result)
&#13;
&#13;
&#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)

我会喜欢这个

&#13;
&#13;
var arr = ["a", "a", "b", "c", "c", "a"],
  red = arr.reduce((p,c) => (p[c]++ || (p[c]=1),p),{});
console.log(red);
&#13;
&#13;
&#13;