Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 带计数的组数组_Javascript_Arrays_Group By_Underscore.js - Fatal编程技术网

Javascript 带计数的组数组

Javascript 带计数的组数组,javascript,arrays,group-by,underscore.js,Javascript,Arrays,Group By,Underscore.js,我有一个包含多个属性的项目数组。属性之一是标记数组。获取这些项目中使用的所有标记并按这些标记在这些项目上使用的次数排序的最佳方法是什么?我一直在努力寻找,但没有得到预期的结果 return _.groupBy(items, 'tags'); 我的数据示例: item1 - itemName: item1 - tags(array): tag1, tag2 item2 - itemName: item2 - tags(array): tag1, tag3 所以我试图得到类似于{tag

我有一个包含多个属性的项目数组。属性之一是标记数组。获取这些项目中使用的所有标记并按这些标记在这些项目上使用的次数排序的最佳方法是什么?我一直在努力寻找,但没有得到预期的结果

return _.groupBy(items, 'tags');
我的数据示例:

item1
 - itemName: item1
 - tags(array): tag1, tag2

item2
 - itemName: item2
 - tags(array): tag1, tag3
所以我试图得到类似于
{tag1,2}{tag2,1}{tag3,1}


更新:我的标签包含一个ID和一个名称。我正在尝试按这些ID分组,您只需使用reduce操作即可。比如说

var项目=[{
itemName:'item1',
标签:[
{id:'tag1',name:'tag1'},
{id:'tag2',name:'tag2'}
]
}, {
itemName:'item2',
标签:[
{id:'tag1',name:'tag1'},
{id:'tag3',name:'tag3'}
]
}];
var标记=项目。减少((标记,项目)=>{
item.tags.forEach(tag=>{
tags[tag.id]=tags[tag.id]| | 0;
标签[tag.id]++;
});
返回标签;
}, {});

document.write(''+JSON.stringify(标记,null,'')+'')
将所有标记数组映射到单个数组中,然后
countBy

var tags = _.chain(items).map(d=>d.tags).flatten().countBy().value();
使用下划线
实用程序

var tagGroup =
  items.reduce(function(p, c){
      c.tags.map(function(tag){     
        p[tag] = p[tag] || {count:0};         
        p[tag].count++;
        return p;
      });

      return p;
  }, {});
你也可以试试这个:


试图实现这段代码,但我得到了对象{[Object]:3}这是预期的吗?我不知道如何得到每个人的计数tag@Snapper您是如何“获得”这些信息的(希望不是通过
alert()
)?您的
项目
数组到底是什么样子的?很抱歉。我意识到我的标签数组与我最初发布的略有不同。我会认为我做错了什么。实现了这一点,得到了与下面@Phil的另一个答案相同的结果。Object{[Object]:3}我怎样才能得到标签,以及标签的使用频率?你的数据结构必须与我和Phil使用的不同,b/c我出于好奇检查了他的答案。看看我的JSFIDLE,看看我们是否使用了相同的数据感谢@Eric Guan的代码,它让我意识到我的结构与我最初发布的不完全一样。将更新。漂亮的答案。我认为
countBy
应该是
countBy('id')
,映射可以被
pulk('tags')
所取代。什么是
{tag1,2}{tag2,1}{tag3,1}
应该是什么?它不是一个有效的数组或对象。@Phil你说得对。只是想知道一个标签被使用了多少次。我已编辑了我的问题。另请参见:
var tagGroup =
  items.reduce(function(p, c){
      c.tags.map(function(tag){     
        p[tag] = p[tag] || {count:0};         
        p[tag].count++;
        return p;
      });

      return p;
  }, {});