Skip to content

Commit 2022f35

Browse files
committed
add. _posts\2024-03-13-Odd-Snippets-Of-JS.md
1 parent c0aa147 commit 2022f35

File tree

1 file changed

+113
-0
lines changed

1 file changed

+113
-0
lines changed
Lines changed: 113 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,113 @@
1+
---
2+
title: 「代码片段」两段略奇怪的 JS 代码
3+
date: 2024-03-13 21:08:10
4+
tags:
5+
- 代码片段
6+
- JavaScript
7+
- 折腾
8+
- 备忘
9+
categories:
10+
- 电脑网络
11+
id: 2663
12+
alias: 20160621482
13+
---
14+
15+
> 2024-03-13:
16+
>
17+
> 又研究了一段不明所以的代码,然后想起来之前也搞过一段,就合并在一起了,然后发现当年那段迷惑程度要高不少。。
18+
19+
<!-- more -->
20+
21+
**数组中按间隔提取元素:**
22+
23+
```js
24+
(() => {
25+
const allNum = 21;
26+
const perNum = 4;
27+
28+
/**
29+
* @param {int} all 元素总数
30+
* @param {int} per 用于将 all 先分成 per 个一组
31+
* @param {int} offset 通过计算决定从第几个元素开始取,大于等于 0,上不设限
32+
* @returns {string} 返回一个字符串,每 per 个元素换行
33+
*/
34+
function fnPickArr(all, per, offset = 0) {
35+
const rltArr = [];
36+
37+
// const chunkNum = Math.floor(all / per);
38+
// ↑ floor 为向下取整,会出现取到 per + 1 个元素的情况
39+
const chunkNum = Math.ceil(all / per);
40+
// ↑ ceil 为向上取整,与 floor 相反,会出现取到 per - 1 个元素的情况
41+
42+
// 本质上就是每隔 chunkNum - 1 个元素取一次,两次取余判断
43+
44+
for (let i = 0; i < all; i++) {
45+
if (i % chunkNum === offset % chunkNum) {
46+
// rltArr[i] = "*";
47+
rltArr[i] = i % per + 1;
48+
49+
} else {
50+
rltArr[i] = "#";
51+
}
52+
}
53+
54+
// 遍历 rltArr,拼接为字符,每 per 个元素换行
55+
let rltStr = "";
56+
for (let i = 0; i < rltArr.length; i++) {
57+
rltStr += rltArr[i];
58+
if ((i + 1) % per === 0) {
59+
rltStr += "\n";
60+
}
61+
}
62+
return rltStr;
63+
}
64+
65+
for (let i = 0; i < 6; i++) {
66+
console.log(fnPickArr(allNum, perNum, i));
67+
}
68+
})();
69+
70+
```
71+
72+
「- -」「- -」「- -」
73+
74+
**在研究缓存失效时间时开的一个脑洞,,虽然不是很清楚有什么实用价值:**
75+
76+
77+
```js
78+
(() => {
79+
let m;
80+
let lstM;
81+
let lstN;
82+
for (let n = 0; n <= 50; n++) {
83+
if (!m) {
84+
m = n + 5;
85+
lstN = n - 1;
86+
}
87+
if (m <= n) {
88+
if (n !== 11 && n !== 12 && n !== 21) {
89+
// if (1 == 1) {
90+
fnLog([m - n, m, n, n - lstN, "do some thing"]);
91+
lstM = m;
92+
m = n + n - lstN;
93+
lstN = n + n - lstM;
94+
} else {
95+
fnLog([m - n, m, n, n - lstN, "skip"]);
96+
}
97+
} else {
98+
fnLog([m - n, m, n, n - lstN]);
99+
}
100+
}
101+
// ----------------------------
102+
function fnLog(n) {
103+
if (Object.prototype.toString.call(n) === "[object Array]") {
104+
a = n.join(" , ");
105+
}
106+
// document.getElementById("debug").innerHTML += a + "<br />";
107+
console.log(a);
108+
}
109+
})();
110+
111+
```
112+
113+
<!--2663-->

0 commit comments

Comments
 (0)