【问题标题】:How to get count of key having similar value in javascript object?如何获取 javascript 对象中具有相似值的键的计数?
【发布时间】:2015-10-09 06:51:29
【问题描述】:

我需要实现这样的目标:

var data = [
    {
        tag:'A',
        others:'Abc'
    },
    {
        tag:'B',
        others:'Bbc'
    },
    {
        tag:'A',
        others:'Acb'
    }
] 

我正在尝试对具有相似值的标记属性进行分组。在给定的示例中,我需要将具有相似值的所有标签分组并将其放在另一个数组中。有没有办法得到类似的东西,

var newArray = [{tag:A,count:2}, {tag:B,count:1}]

【问题讨论】:

  • 如果您只使用常规对象而不是包含对象的数组,这将容易十倍。如{"A" : 2, "B" : 1 } 等。
  • “相似”是一个非常非常主观的术语。您的意思是“具有相同tag 值的对象”吗?
  • @Amadan。是的,我的意思是具有相同标签值的对象。

标签: javascript arrays angularjs mongodb object


【解决方案1】:

这就是Array.reduce 存在的原因:

var data = [
    {
        tag:'A',
        others:'Abc'
    },
    {
        tag:'B',
        others:'Bbc'
    },
    {
        tag:'A',
        others:'Acb'
    }
];

var tmp = data.reduce(function (result, item) {
  result[item.tag] = ++result[item.tag] || 1;
  return result;
}, {});

var count = [];
Object.keys(tmp).forEach(function(key) { count.push({ tag: key, count: tmp[key] }); });

console.log(count);
document.write(JSON.stringify(count, null, 4));

【讨论】:

    【解决方案2】:

    使用Lodash countBy method,你可以做类似的事情:

    var newArray = _.countBy(data, function(val) {
        return val.tag;
    });
    

    这将输出如下:

    { 'A': 2, 'B': 1 }
    

    别忘了在你的项目中加入 Lodash

    【讨论】:

    • 它正在工作。但我想用普通的 javascript 来做这件事,因为我不想添加额外的库。
    • 我想知道为什么当它不符合要求时它被接受为答案。使用 Array.reduce 的答案不需要任何外部依赖,并提供了一个工作示例。
    【解决方案3】:

    我从头开始写一切!!! 这是代码!结果数组就是你想要的......

    <script>
    var data= [
                 {
                  tag:'A',
                  others:'Abc'
                },
                {
                 tag:'B',
                 others:'Bbc'
                },
                 {
                 tag:'A',
                 others:'Acb'
                 }
    
              ] ;
    var tags=[];
    var flag=0;
    var result=[];
    for(i=0;i<data.length;i++)
    {
    	for(j=0;j<tags.length;j++) if(tags[j]==data[i].tag) flag=1;
    	if(flag==0) tags.push(data[i].tag);
    }          
    for(k=0;k<tags.length;k++)
    {
    	count=0;
    	for(m=0;m<data.length;m++)
    	{
    		if(data[m].tag==tags[k]) count++;
    	}
    	var obj={};
    	obj.tag=tags[k];
    	obj.count=count;
    	result.push(obj);
    }
    document.write(result[0].count);
    </script>

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-12-28
      • 1970-01-01
      • 1970-01-01
      • 2021-12-30
      • 2016-06-28
      • 1970-01-01
      • 2020-09-11
      相关资源
      最近更新 更多