0%

无聊写下Reduce

在写这篇文章之前记录下自己的刚发现的图床工具PicGO,在附上github地址用vue和electron开发的桌面应用,之前我一直很苦恼写markdown的时候上传图片很麻烦,现在有了这个工具,一切都变得很easy。

不过这个工具直接下载安装安装不了,我是用scoop安装的,今天还看到了一个界面十分优美得类似markdown的工具,但是奈何电脑直接安装是装不了的,也没有scoop的安装方式,真的好可惜,哪天再去试试。

目前工作中用到reduce的情况也还好,先备着

结合concat实现数组扁平化

1
2
3
4
5
6
7
8
const arr = [
[1,2],
[3,4],
[5,6]
].reduce((acc, cur) => {
return acc.concat(cur)
}, [])
console.log(arr)

多维数组扁平化

1
2
3
4
5
6
7
8
9
10
const arr = [
[1, 2,[2, 3, 4, 5]],
[3, 4, [2, 3,[2, 3, 1]]],
[5, 6]
]
const flatten = (arr) => {
return arr.reduce((pre, cur) =>
pre.concat(Array.isArray(cur)? flatten(cur) : cur),[])
}
console.log(flatten(arr))

数组分块

根据传入限制大小,对数组进行分块,小于限制长度就往里面添加,否则直接将其加入res

1
2
3
4
5
6
7
8
9
10
11
12
13
const chunk = (arr, size) => {
return arr.reduce(
(res, cur) => (
res[res.length - 1].length < size
? res[res.length - 1].push(cur)
: res.push([cur]),
res
),
[[]]
);
};
const arr4 = [1, 2, 3, 4, 5, 6];
console.log(chunk(arr4, 3)); // [ [ 1, 2, 3 ], [ 4, 5, 6 ] ]

字符串统计

1
2
3
4
5
6
7
8
9
const countChar = text => {
text = text.split("");
return text.reduce((record, c) => {
record[c] = (record[c] || 0) + 1;
return record;
}, {});
};
const text = "划水水摸鱼鱼";
console.log(countChar(text)); // { '划': 1, '水': 2, '摸': 1, '鱼': 2 }