Skip to content

Commit b540fbb

Browse files
committed
feat: add solutions to lc problems: No.2675~2677
* No.2675.Array of Objects to Matrix * No.2676.Throttle * No.2677.Chunk Array
1 parent 4f1ca66 commit b540fbb

File tree

9 files changed

+213
-6
lines changed

9 files changed

+213
-6
lines changed

solution/2600-2699/2675.Array of Objects to Matrix/README.md

+38-1
Original file line numberDiff line numberDiff line change
@@ -143,7 +143,44 @@ There are no keys so every row is an empty array.</pre>
143143
<!-- 这里可写当前语言的特殊实现逻辑 -->
144144

145145
```ts
146-
146+
function jsonToMatrix(arr: any[]): (string | number | boolean | null)[] {
147+
const dfs = (key: string, obj: any) => {
148+
if (
149+
typeof obj === 'number' ||
150+
typeof obj === 'string' ||
151+
typeof obj === 'boolean' ||
152+
obj === null
153+
) {
154+
return { [key]: obj };
155+
}
156+
const res: any[] = [];
157+
for (const [k, v] of Object.entries(obj)) {
158+
const newKey = key ? `${key}.${k}` : `${k}`;
159+
res.push(dfs(newKey, v));
160+
}
161+
return res.flat();
162+
};
163+
164+
const kv = arr.map(obj => dfs('', obj));
165+
const keys = [
166+
...new Set(
167+
kv
168+
.flat()
169+
.map(obj => Object.keys(obj))
170+
.flat(),
171+
),
172+
].sort();
173+
const ans: any[] = [keys];
174+
for (const row of kv) {
175+
const newRow: any[] = [];
176+
for (const key of keys) {
177+
const v = row.find(r => r.hasOwnProperty(key))?.[key];
178+
newRow.push(v === undefined ? '' : v);
179+
}
180+
ans.push(newRow);
181+
}
182+
return ans;
183+
}
147184
```
148185

149186
<!-- tabs:end -->

solution/2600-2699/2675.Array of Objects to Matrix/README_EN.md

+38-1
Original file line numberDiff line numberDiff line change
@@ -137,7 +137,44 @@ There are no keys so every row is an empty array.</pre>
137137
### **TypeScript**
138138

139139
```ts
140-
140+
function jsonToMatrix(arr: any[]): (string | number | boolean | null)[] {
141+
const dfs = (key: string, obj: any) => {
142+
if (
143+
typeof obj === 'number' ||
144+
typeof obj === 'string' ||
145+
typeof obj === 'boolean' ||
146+
obj === null
147+
) {
148+
return { [key]: obj };
149+
}
150+
const res: any[] = [];
151+
for (const [k, v] of Object.entries(obj)) {
152+
const newKey = key ? `${key}.${k}` : `${k}`;
153+
res.push(dfs(newKey, v));
154+
}
155+
return res.flat();
156+
};
157+
158+
const kv = arr.map(obj => dfs('', obj));
159+
const keys = [
160+
...new Set(
161+
kv
162+
.flat()
163+
.map(obj => Object.keys(obj))
164+
.flat(),
165+
),
166+
].sort();
167+
const ans: any[] = [keys];
168+
for (const row of kv) {
169+
const newRow: any[] = [];
170+
for (const key of keys) {
171+
const v = row.find(r => r.hasOwnProperty(key))?.[key];
172+
newRow.push(v === undefined ? '' : v);
173+
}
174+
ans.push(newRow);
175+
}
176+
return ans;
177+
}
141178
```
142179

143180
<!-- tabs:end -->
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
function jsonToMatrix(arr: any[]): (string | number | boolean | null)[] {
2+
const dfs = (key: string, obj: any) => {
3+
if (
4+
typeof obj === 'number' ||
5+
typeof obj === 'string' ||
6+
typeof obj === 'boolean' ||
7+
obj === null
8+
) {
9+
return { [key]: obj };
10+
}
11+
const res: any[] = [];
12+
for (const [k, v] of Object.entries(obj)) {
13+
const newKey = key ? `${key}.${k}` : `${k}`;
14+
res.push(dfs(newKey, v));
15+
}
16+
return res.flat();
17+
};
18+
19+
const kv = arr.map(obj => dfs('', obj));
20+
const keys = [
21+
...new Set(
22+
kv
23+
.flat()
24+
.map(obj => Object.keys(obj))
25+
.flat(),
26+
),
27+
].sort();
28+
const ans: any[] = [keys];
29+
for (const row of kv) {
30+
const newRow: any[] = [];
31+
for (const key of keys) {
32+
const v = row.find(r => r.hasOwnProperty(key))?.[key];
33+
newRow.push(v === undefined ? '' : v);
34+
}
35+
ans.push(newRow);
36+
}
37+
return ans;
38+
}

solution/2600-2699/2676.Throttle/README.md

+26-1
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,32 @@ The 5th is called at 300ms, but it is after 260ms, so it should be called immedi
6666
<!-- 这里可写当前语言的特殊实现逻辑 -->
6767

6868
```ts
69-
69+
type F = (...args: any[]) => void;
70+
71+
function throttle(fn: F, t: number): F {
72+
let pre = 0;
73+
let timeId = null;
74+
75+
return function (...args) {
76+
const cur = Date.now();
77+
if (cur - pre >= t) {
78+
fn(...args);
79+
pre = cur;
80+
} else {
81+
clearTimeout(timeId);
82+
timeId = setTimeout(() => {
83+
fn(...args);
84+
pre += t;
85+
}, t - (cur - pre));
86+
}
87+
};
88+
}
89+
90+
/**
91+
* const throttled = throttle(console.log, 100);
92+
* throttled("log"); // logged immediately.
93+
* throttled("log"); // logged at t=100ms.
94+
*/
7095
```
7196

7297
<!-- tabs:end -->

solution/2600-2699/2676.Throttle/README_EN.md

+26-1
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,32 @@ The 5th is called at 300ms, but it is after 260ms, so it should be called immedi
6060
### **TypeScript**
6161

6262
```ts
63-
63+
type F = (...args: any[]) => void;
64+
65+
function throttle(fn: F, t: number): F {
66+
let pre = 0;
67+
let timeId = null;
68+
69+
return function (...args) {
70+
const cur = Date.now();
71+
if (cur - pre >= t) {
72+
fn(...args);
73+
pre = cur;
74+
} else {
75+
clearTimeout(timeId);
76+
timeId = setTimeout(() => {
77+
fn(...args);
78+
pre += t;
79+
}, t - (cur - pre));
80+
}
81+
};
82+
}
83+
84+
/**
85+
* const throttled = throttle(console.log, 100);
86+
* throttled("log"); // logged immediately.
87+
* throttled("log"); // logged at t=100ms.
88+
*/
6489
```
6590

6691
<!-- tabs:end -->
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
type F = (...args: any[]) => void;
2+
3+
function throttle(fn: F, t: number): F {
4+
let pre = 0;
5+
let timeId = null;
6+
7+
return function (...args) {
8+
const cur = Date.now();
9+
if (cur - pre >= t) {
10+
fn(...args);
11+
pre = cur;
12+
} else {
13+
clearTimeout(timeId);
14+
timeId = setTimeout(() => {
15+
fn(...args);
16+
pre += t;
17+
}, t - (cur - pre));
18+
}
19+
};
20+
}
21+
22+
/**
23+
* const throttled = throttle(console.log, 100);
24+
* throttled("log"); // logged immediately.
25+
* throttled("log"); // logged at t=100ms.
26+
*/

solution/2600-2699/2677.Chunk Array/README.md

+7-1
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,13 @@
6464
<!-- 这里可写当前语言的特殊实现逻辑 -->
6565

6666
```ts
67-
67+
function chunk(arr: any[], size: number): any[][] {
68+
const ans: any[][] = [];
69+
for (let i = 0, n = arr.length; i < n; i += size) {
70+
ans.push(arr.slice(i, i + size));
71+
}
72+
return ans;
73+
}
6874
```
6975

7076
<!-- tabs:end -->

solution/2600-2699/2677.Chunk Array/README_EN.md

+7-1
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,13 @@
5858
### **TypeScript**
5959

6060
```ts
61-
61+
function chunk(arr: any[], size: number): any[][] {
62+
const ans: any[][] = [];
63+
for (let i = 0, n = arr.length; i < n; i += size) {
64+
ans.push(arr.slice(i, i + size));
65+
}
66+
return ans;
67+
}
6268
```
6369

6470
<!-- tabs:end -->
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
function chunk(arr: any[], size: number): any[][] {
2+
const ans: any[][] = [];
3+
for (let i = 0, n = arr.length; i < n; i += size) {
4+
ans.push(arr.slice(i, i + size));
5+
}
6+
return ans;
7+
}

0 commit comments

Comments
 (0)