来试试最少的 JS 代码完成收集 V2EX 上的 at 人列表

2018-12-25 15:12:35 +08:00
 mywaiting

想搞个 V2 的线下聚会,要收集一整页参与评论的人员(不重复),然后一次 at 完

码农嘛,整天想玩玩自己的代码搞事情

突发奇想搞个小比赛,要求如下:

我自己写一个,抛砖引玉吧

Object.keys($('#Main .box .dark').toArray().reduce(function(obj, c) {
	obj['@' + $(c).text()] = 1;
	return obj;
}, {})).join('\n')

正在 V2 摸鱼的同学,线上打怪任务来了!

哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈

3167 次点击
所在节点    JavaScript
14 条回复
jera
2018-12-25 15:24:40 +08:00
都用 JQuery 了,几千行是有了吧。
mywaiting
2018-12-25 15:30:14 +08:00
@jera 竟然无言以对........
johnnyNg
2018-12-25 15:30:53 +08:00
```javascript
document
.querySelectorAll('#Main .box .dark')
.map(el => `@${el.innerHtml}`)
.join('\n')
```
yuanfnadi
2018-12-25 15:36:11 +08:00
[...new Set(Array.from(document.querySelectorAll('#Main .box .dark')).map(o=>(`@${o.text}`)))].join("\n")
yuanfnadi
2018-12-25 15:37:11 +08:00
@johnnyNg
1 document.querySelectorAll 结果不是 array
2 没有去重复
johnnyNg
2018-12-25 15:40:43 +08:00
@johnnyNg

[...document.querySelectorAll('#Main .box .dark')]
.map(el => `@${el.text}`)
.join('\n')
royzxq
2018-12-25 15:43:58 +08:00
[].slice.call($$('#Main a.dark')).reduce((all, it) => {
if (!all.includes('@' + it.text)) {
all.push('@' + it.text)
}

return all;
}, []).join(' ');

#4 学习了
123s
2018-12-25 15:44:49 +08:00
不要 at 我看看
123s
2018-12-25 15:45:08 +08:00
没有 at 的也会算上啊
johnnyNg
2018-12-25 15:46:40 +08:00
@yuanfnadi
是的,没有试一下,还忽略了去重

[
...new Set(
[...document.querySelectorAll('#Main .box .dark')].map(el => `@${el.text}`)
)
].join('\n')

你的差不多是最优解了
wildnode
2018-12-25 15:51:44 +08:00
Chrome 控制台版本,可以省去冗长的 document. querySelectorAll
另外缩减了一下选择器长度,跑了几个帖子貌似没啥问题 2333

[...new Set($$('#Main .dark').map(i => `@${i.text}`))].join('\n')
jydeng
2018-12-25 15:53:08 +08:00
学习了
no1xsyzy
2018-12-25 16:09:25 +08:00
在 v2 你甚至可以玩 codegolf ……

61 bytes
[...new Set($$('#Main .dark').map(e=>"@"+e.text))].join('\n')

注意模板字符串只有在两边都有添加文本的时候更短
mywaiting
2018-12-25 16:39:01 +08:00
@123s 这里统计的是参与评论主贴的人员,如果参与评论主贴的回复内容里面还 at 了其他人员的话,这个我是没有考虑到的

如果需要全部计算整个主贴下面的评论人员,含回复内容内 at 的,应该思路也是差不多的,就是筛选一下回复内容里面的 at 吧

你可以尝试实现以下~ :)

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/520840

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX