mirror of
				https://github.com/KieSun/all-of-frontend.git
				synced 2025-05-29 01:49:23 +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…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user