【问题标题】:Grouping js string array with counting用计数对js字符串数组进行分组
【发布时间】:2014-02-04 10:19:59
【问题描述】:

我在 js 中有一个简单的数组

var fruit = [ 'apple' , 'apple' , 'orange' ]

我需要这个摸索,以便我可以以格式呈现数据:

apple 2
orange 1

我尝试过创建两个数组,但都失控了。

【问题讨论】:

  • 向我们展示您已经尝试过的内容。

标签: javascript


【解决方案1】:

你可以用减少来简洁地做到这一点:

function count(xs) {
  return xs.reduce(function(a,e) {
    return a[e] = ++a[e]||1, a;
  },{});
}

count(fruit); //=> {apple:2, orange:1}

【讨论】:

  • 我正要发一个自己的reduce,但后来我看到了那一小段美...
【解决方案2】:

您可以迭代 fruit 值并增加一个计数器:

var result = {};
for (var i = 0, n = fruit.length; i < n; i++) {
  if (typeof result[fruit[i]] === 'undefined') {
    result[fruit[i]] = 1;
  } else {
    result[fruit[i]]++;
  }
}

console.log(result); // Object {apple: 2, orange: 1}

【讨论】:

    【解决方案3】:

    这是一种方法:

    var fruit = ['apple', 'apple', 'orange'];
    
    var occurences = {};
    for (var index = 0; index < fruit.length; index++) {
        var value = fruit[index];
        occurences[value] = occurences[value] ? occurences[value] + 1 : 1;
    }
    
    console.log(occurences);
    

    记录的输出是一个包含 apple: 2, orange: 1} 的对象,您可以在此处看到:http://jsfiddle.net/zZ2hk/

    【讨论】:

      【解决方案4】:
      var fruits = [ 'apple' , 'apple' , 'orange' ];
      var result = {};
      
      for(var i = 0; i < fruits.length; i++){
          var item = fruits[i];
          result[item] = result[item] ? result[item] + 1 : 1;
      }
      
      console.log(result); // Object { apple=2,  orange=1}
      

      【讨论】:

        【解决方案5】:

        试试下划线countBy函数:

        var fruit = [ 'apple' , 'apple' , 'orange' ];
        var count = _.countBy(fruit, function(el) {
            return el;
        });
        

        它还有其他非常有用的功能。

        【讨论】:

        • youmightnotneedjquery.com - 下划线也一样。这是一个不错的库,是的,但对于请求的功能来说可能有点太多了。
        【解决方案6】:
        var fruit = [ 'apple' , 'apple' , 'orange' ];
        var counts = {};
        
        for(var i =0; i < fruit.length;i++){
            counts[fruit[i]] = (counts[fruit[i]]) ? counts[fruit[i]] + 1:1;
        }
        

        JS 小提琴: http://jsfiddle.net/FuXMu/2

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2015-02-21
          • 1970-01-01
          • 2022-05-22
          • 2015-06-29
          • 1970-01-01
          • 2020-01-26
          • 1970-01-01
          相关资源
          最近更新 更多