如何在javascript对象中获取具有相似值的键的数量?

时间:2015-10-09 06:51:29

标签: javascript arrays angularjs mongodb object

我需要实现这样的目标:

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

我正在尝试对具有类似值的tag属性进行分组。在给定的示例中,我需要将具有相似值的所有标记分组并将其放在另一个数组上。是否可以获得类似的内容,

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

3 个答案:

答案 0 :(得分:2)

为什么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));

答案 1 :(得分:1)

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

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

这将输出如下:

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

不要忘记将Lodash包含在您的项目中

答案 2 :(得分:0)

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



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