mirror of
https://github.com/KieSun/all-of-frontend.git
synced 2024-11-22 06:48:13 +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