如何在javascript对象中获得具有相似值的键的计数

How to get count of key having similar value in javascript object?

本文关键字:相似 javascript 对象      更新时间:2023-09-26

我需要实现这样的东西:

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

我试图组标签属性具有相似的值。在给定的示例中,我需要将具有相似值的所有标记分组并将其放在另一个数组上。有没有办法得到像

这样的东西?
var newArray = [{tag:A,count:2}, {tag:B,count:1}]

这就是为什么数组。减少存在:

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

使用Lodash countBy方法,您可以执行如下操作:

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

输出如下:

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

不要忘记在项目中包含Lodash

我是从头开始写的!!下面是代码!结果数组就是你想要的…

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