Javascript count duplicates and uniques and add to array

前端 未结 5 1512
无人及你
无人及你 2021-01-26 10:29

I\'m trying to count duplicates in an array of dates and add them to a new array.

But i\'m only getting the duplicates and the amount of times they exist in the array. <

相关标签:
5条回答
  • 2021-01-26 10:47

    For that, you can use .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);

    0 讨论(0)
  • 2021-01-26 10:49

    You can use reduce and return object

    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)

    You can also first create Object and then use forEach add properties and increment values

    var ar = ['a', 'a', 'b', 'c', 'c'], result = {}
    ar.forEach(e => result[e] = (result[e] || 0)+1);
    console.log(result)

    0 讨论(0)
  • 2021-01-26 10:54

    I would do like this

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

    0 讨论(0)
  • 2021-01-26 10:57

    You might need an object for this, not an array. So what you are doing is already great, but the if condition is messing up:

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

    Snippet

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

    Or in better way, you can use .reduce like how others have given. A simple reduce function will be:

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

    0 讨论(0)
  • 2021-01-26 11:03

    lodash's countBy function will do the trick:

    _.countBy(['a', 'a', 'b', 'c', 'c']) will evaluate to: {a: 2, b: 1, c: 2}

    It does involve adding lodash as a dependency though.

    0 讨论(0)
提交回复
热议问题