我需要实现这样的目标:
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}]
答案 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;