mirror of
https://github.com/KieSun/all-of-frontend.git
synced 2024-11-25 08:18:14 +08:00
docs: 第六题答案
This commit is contained in:
parent
aee768b74c
commit
82abddab67
70
Answer/1 ~ 10/6.md
Normal file
70
Answer/1 ~ 10/6.md
Normal file
@ -0,0 +1,70 @@
|
||||
```js
|
||||
/**
|
||||
* @param input
|
||||
* @param size
|
||||
* @returns {Array}
|
||||
*/
|
||||
_.chunk(['a', 'b', 'c', 'd'], 2)
|
||||
// => [['a', 'b'], ['c', 'd']]
|
||||
|
||||
_.chunk(['a', 'b', 'c', 'd'], 3)
|
||||
// => [['a', 'b', 'c'], ['d']]
|
||||
|
||||
_.chunk(['a', 'b', 'c', 'd'], 5)
|
||||
// => [['a', 'b', 'c', 'd']]
|
||||
|
||||
_.chunk(['a', 'b', 'c', 'd'], 0)
|
||||
// => []
|
||||
```
|
||||
|
||||
这道题目其实就是让大家实现一个 lodash 里的函数,这边我们需要注意的一个点是不能更改原数组,虽然题目没有提到,但是我们得想到这个。
|
||||
|
||||
笔者这里推荐几个答案,分别是不同的写法,难度从低到高吧。
|
||||
|
||||
首先是遍历的写法:
|
||||
|
||||
[答案链接](https://github.com/KieSun/fucking-frontend/issues/8#issuecomment-799053150)
|
||||
|
||||
```js
|
||||
function chunk(arr, num) {
|
||||
if (num === 0) return [];
|
||||
if (Array.isArray(arr) && typeof num === "number") {
|
||||
let result = [];
|
||||
let i = 0;
|
||||
while (i < arr.length) {
|
||||
result.push(arr.slice(i, i + num));
|
||||
i += num;
|
||||
}
|
||||
return result;
|
||||
} else {
|
||||
console.log("params type error");
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
我们也可以使用 `reduce` 来解题:
|
||||
|
||||
[答案链接](https://github.com/KieSun/fucking-frontend/issues/8#issuecomment-799021398)
|
||||
|
||||
```js
|
||||
const chunk = (arr, len) => arr.reduce((pre, cur, index) => {
|
||||
if (index % len === 0) {
|
||||
pre.push([cur])
|
||||
return pre
|
||||
}
|
||||
const temp = pre[pre.length - 1]
|
||||
temp && temp.push(cur)
|
||||
return pre
|
||||
}, [])
|
||||
```
|
||||
|
||||
甚至直接优化到一行:
|
||||
|
||||
[答案链接](https://github.com/KieSun/fucking-frontend/issues/8#issuecomment-799344324)
|
||||
|
||||
```js
|
||||
function chunk(arr, size){
|
||||
return Array.from({length: (size = Number.parseInt(size)) ? Math.ceil(arr.length/size) : 0})
|
||||
.map((a,i) => arr.slice(i*size, (i+1)*size))
|
||||
}
|
||||
```
|
Loading…
Reference in New Issue
Block a user