V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
推荐关注
Meteor
JSLint - a JavaScript code quality tool
jsFiddle
D3.js
WebStorm
推荐书目
JavaScript 权威指南第 5 版
Closure: The Definitive Guide
mywaiting

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

  •  
  •   mywaiting · Dec 25, 2018 · 3730 views
    This topic created in 2683 days ago, the information mentioned may be changed or developed.

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

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

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

    • 收集一整页的参与评论的人员
    • 人员的 username 不能重复
    • 代码最少、逻辑简洁(不考虑 JS 压缩后的最少,为了观赏性,至少保留换行,能保留空格更好)

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

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

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

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

    14 replies    2018-12-25 16:39:01 +08:00
    jera
        1
    jera  
       Dec 25, 2018   ❤️ 1
    都用 JQuery 了,几千行是有了吧。
    mywaiting
        2
    mywaiting  
    OP
       Dec 25, 2018
    @jera 竟然无言以对........
    johnnyNg
        3
    johnnyNg  
       Dec 25, 2018
    ```javascript
    document
    .querySelectorAll('#Main .box .dark')
    .map(el => `@${el.innerHtml}`)
    .join('\n')
    ```
    yuanfnadi
        4
    yuanfnadi  
       Dec 25, 2018
    [...new Set(Array.from(document.querySelectorAll('#Main .box .dark')).map(o=>(`@${o.text}`)))].join("\n")
    yuanfnadi
        5
    yuanfnadi  
       Dec 25, 2018
    @johnnyNg
    1 document.querySelectorAll 结果不是 array
    2 没有去重复
    johnnyNg
        6
    johnnyNg  
       Dec 25, 2018
    @johnnyNg

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

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

    #4 学习了
    123s
        8
    123s  
       Dec 25, 2018
    不要 at 我看看
    123s
        9
    123s  
       Dec 25, 2018
    没有 at 的也会算上啊
    johnnyNg
        10
    johnnyNg  
       Dec 25, 2018
    @yuanfnadi
    是的,没有试一下,还忽略了去重

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

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

    [...new Set($$('#Main .dark').map(i => `@${i.text}`))].join('\n')
    jydeng
        12
    jydeng  
       Dec 25, 2018
    学习了
    no1xsyzy
        13
    no1xsyzy  
       Dec 25, 2018
    在 v2 你甚至可以玩 codegolf ……

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

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

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

    你可以尝试实现以下~ :)
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2454 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 45ms · UTC 05:13 · PVG 13:13 · LAX 22:13 · JFK 01:13
    ♥ Do have faith in what you're doing.