想搞个 V2 的线下聚会,要收集一整页参与评论的人员(不重复),然后一次 at 完
码农嘛,整天想玩玩自己的代码搞事情
突发奇想搞个小比赛,要求如下:
- 收集一整页的参与评论的人员
- 人员的 username 不能重复
- 代码最少、逻辑简洁(不考虑 JS 压缩后的最少,为了观赏性,至少保留换行,能保留空格更好)
我自己写一个,抛砖引玉吧
Object.keys($('#Main .box .dark').toArray().reduce(function(obj, c) {
obj['@' + $(c).text()] = 1;
return obj;
}, {})).join('\n')
正在 V2 摸鱼的同学,线上打怪任务来了!
哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈
都用 JQuery 了,几千行是有了吧。
竟然无言以对........
```javascript
document
.querySelectorAll('.box .dark')
.map(el => `@${el.innerHtml}`)
.join('\n')
```
[...new Set(Array.from(document.querySelectorAll('.box .dark')).map(o=>(`@${o.text}`)))].join("\n")
1 document.querySelectorAll 结果不是 array
2 没有去重复
[...document.querySelectorAll('.box .dark')]
.map(el => `@${el.text}`)
.join('\n')
[].slice.call($$('a.dark')).reduce((all, it) => {
if (!all.includes('@' + it.text)) {
all.push('@' + it.text)
}
return all;
}, []).join(' ');
学习了
不要 at 我看看
没有 at 的也会算上啊
是的,没有试一下,还忽略了去重
[
...new Set(
[...document.querySelectorAll('.box .dark')].map(el => `@${el.text}`)
)
].join('\n')
你的差不多是最优解了
Chrome 控制台版本,可以省去冗长的 document. querySelectorAll
另外缩减了一下选择器长度,跑了几个帖子貌似没啥问题 2333
[...new Set($$('.dark').map(i => `@${i.text}`))].join('\n')
学习了
在 v2 你甚至可以玩 codegolf ……
61 bytes
[...new Set($$('.dark').map(e=>"@"+e.text))].join('\n')
注意模板字符串只有在两边都有添加文本的时候更短
这里统计的是参与评论主贴的人员,如果参与评论主贴的回复内容里面还 at 了其他人员的话,这个我是没有考虑到的
如果需要全部计算整个主贴下面的评论人员,含回复内容内 at 的,应该思路也是差不多的,就是筛选一下回复内容里面的 at 吧
你可以尝试实现以下~ :)