使用Underscore.js统计字典数组中标签的出现次数
用Underscore.js优雅统计标签出现次数
嘿,这问题虽说基础,但Underscore的链式调用和工具函数确实能帮我们写出更简洁优雅的实现,完全不用嵌套一堆for循环。我给你分享个直观的方案:
var dict = [{name: 'bob', tags: ['tag1', 'tag2']}, {name: 'alice', tags: ['tag1']}, {name: 'John', tags: ['tag2', 'tag3']}]; var result = _.chain(dict) // 第一步:提取所有对象里的tags字段,得到一个二维数组 .pluck('tags') // 第二步:把二维数组展开成一维的标签数组 .flatten() // 第三步:统计每个标签的出现次数,得到 {tag1: 2, tag2: 2, tag3: 1} 这样的统计对象 .countBy() // 第四步:把统计对象转换成你需要的单个对象组成的数组格式 .map(function(count, tag) { var tagObj = {}; tagObj[tag] = count; return tagObj; }) // 最后调用value()获取链式调用的最终结果 .value(); // 输出结果:[{tag1:2}, {tag2:2}, {tag3:1}] console.log(result);
如果你的运行环境支持ES6语法,还可以把map里的代码简化得更清爽:
.map((count, tag) => ({ [tag]: count }))
这个方案的核心是利用Underscore的链式调用把数据处理流程串起来,每一步都清晰明了,比手动写循环可读性高多了。另外提一句,你期望结果里tag3的次数写的是3,应该是笔误吧?原数组里tag3只出现了1次哦😉
内容的提问来源于stack exchange,提问作者bli00
相关产品推荐
相关产品推荐

