「代码片段」两段略奇怪的 JS 代码

吐槽/反馈/建议:我的咸鱼心  爱发电-@wdssmq

2024-03-13:

又研究了一段不明所以的代码,然后想起来之前也搞过一段,就合并在一起了,然后发现当年那段迷惑程度要高不少。。

数组中按间隔提取元素:

(() => {
    const allNum = 21;
    const perNum = 4;

    /**
     * @param {int} all  元素总数
     * @param {int} per 用于将 all 先分成 per 个一组
     * @param {int} offset 通过计算决定从第几个元素开始取,大于等于 0,上不设限
     * @returns {string} 返回一个字符串,每 per 个元素换行
     */
    function fnPickArr(all, per, offset = 0) {
        const rltArr = [];

        // const chunkNum = Math.floor(all / per);
        // ↑ floor 为向下取整,会出现取到 per + 1 个元素的情况
        const chunkNum = Math.ceil(all / per);
        // ↑ ceil 为向上取整,与 floor 相反,会出现取到 per - 1 个元素的情况

        // 本质上就是每隔 chunkNum - 1 个元素取一次,两次取余判断

        for (let i = 0; i < all; i++) {
            if (i % chunkNum === offset % chunkNum) {
                // rltArr[i] = "*";
                rltArr[i] = i % per + 1;

            } else {
                rltArr[i] = "#";
            }
        }

        // 遍历 rltArr,拼接为字符,每 per 个元素换行
        let rltStr = "";
        for (let i = 0; i < rltArr.length; i++) {
            rltStr += rltArr[i];
            if ((i + 1) % per === 0) {
                rltStr += "\n";
            }
        }
        return rltStr;
    }

    for (let i = 0; i < 6; i++) {
        console.log(fnPickArr(allNum, perNum, i));
    }
})();

「- -」「- -」「- -」

在研究缓存失效时间时开的一个脑洞,,虽然不是很清楚有什么实用价值:

(() => {
    let m;
    let lstM;
    let lstN;
    for (let n = 0; n <= 50; n++) {
        if (!m) {
            m = n + 5;
            lstN = n - 1;
        }
        if (m <= n) {
            if (n !== 11 && n !== 12 && n !== 21) {
                // if (1 == 1) {
                fnLog([m - n, m, n, n - lstN, "do some thing"]);
                lstM = m;
                m = n + n - lstN;
                lstN = n + n - lstM;
            } else {
                fnLog([m - n, m, n, n - lstN, "skip"]);
            }
        } else {
            fnLog([m - n, m, n, n - lstN]);
        }
    }
    // ----------------------------
    function fnLog(n) {
        if (Object.prototype.toString.call(n) === "[object Array]") {
            a = n.join(" , ");
        }
        // document.getElementById("debug").innerHTML += a + "<br />";
        console.log(a);
    }
})();


爱发电

本文标题:《「代码片段」两段略奇怪的 JS 代码》作者:沉冰浮水
原文链接:https://www.wdssmq.com/post/20160621482.html
特别注明外均为原创,转载请注明。

分享到微信

扫描二维码

可在微信查看或分享至朋友圈。

相关文章

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

网站分类

搜索

本周旧文

wdssmq/blog-astro: 一个基于 Astro 的静态博客;

本质上,面临一个代码问题时,我们需要的是另一个人愿意为「你」的问题投入精力,并且有相应的技术知识。。

接上一条,Resilio Sync 换 Syncthing 感觉也是略大的工程。。Orz

去年 GoodSync 送了一年授权,然后也确实用上了;本来想着到期就换 Syncthing,结果前几天临期提醒,花 ¥381 续了三年 Orz,两者定位和使用姿势还是有些差别的。。更早是用 Resilio Sync 和 BCompare,但是前者内存占用太高,后者并不是自动同步的定位。。

2024 年了,姑且备份下嘟特存档。。

……,一个不知名的小众样式库 + 内联样式混写这种入坑姿势确实很有槽点,但是,「已经开始学」并且能够持续是绝对值得肯定的。。

在贴吧看过很多提问了,就有种错觉:好多人为了提一个问题专门注册了贴吧,问题本身可能得到有效回答,也可能没有(和提问的点及具体姿势有关。。但无论如何,之后就和注销了账号一样没有然后了,好像之后永远不用学相应的东西一样。。

《恶魔娃娃》

- 他们正研究你究竟是真正的大人,还是伪装成大人的小孩

- 我自己都研究很久了

乐高 DC 里,(基本就蝙蝠侠家,,年龄最小的那个无论是谁感觉人设都会变得一样 - -

所以,就感觉和祥林嫂一样,每天都需要向外「签到」自己的情绪感受,然而又并没有什么「需要」我这样的签到……

爱发电支持者

最新留言

友情链接

  • 订阅本站的 RSS 2.0 新闻聚合
召唤伊斯特瓦尔