编写高质量代码
一、手写一个函数,实现数组扁平化
1. Array Flatten
- 写一个 JS 函数,实现数组扁平化,只减少一级嵌套
- 如输入
[1, [2, [3]], 4],输出[1, 2, [3], 4]
2. 思路
- 定义空数组
arr = []遍历当前数组 - 如果 item 非数组,则累加到 arr
- 如果 item 是数组,则遍历之后累加到 arr
3. 代码
使用 push
typescript/** * 数组扁平化 - 使用 push * @param arr */ export function flatten1(arr: any[]): any[] { const res: any[] = [] arr.forEach(item => { if (Array.isArray(item)) { item.forEach(value => res.push(value)) } else { res.push(item) } }) return res }使用 concat
typescript/** * 数组扁平化 - 使用 concat * @param arr */ export function flatten2(arr: any[]): any[] { let res: any[] = [] arr.forEach(item => { res = res.concat(item) }) return res }
4. 单元测试
typescript
/**
* @description 数组扁平化 - 单元测试
* @author lzz
*/
import {flatten1, flatten2} from './1. 数组扁平化'
describe("数组扁平化单元测试", () => {
it('空数组', () => {
const res = flatten1([])
expect(res).toEqual([])
})
it('非嵌套数组', () => {
const res = flatten1([1, 2, 3, 4, 5])
expect(res).toEqual([1, 2, 3, 4, 5])
})
it('一级嵌套', () => {
const res = flatten1([1, [2, 3, 4], 5])
expect(res).toEqual([1, 2, 3, 4, 5])
})
it('二级嵌套', () => {
const res = flatten1([1, [2, [3], 4], 5])
expect(res).toEqual([1, 2, [3], 4, 5])
})
})(连环问) 实现数组深度扁平化
1. Array Flatten 彻底 “ 拍平 ”
- 写一个 JS 函数,实现数组扁平化,减少所有嵌套层级
- 如输入
[1, [2, [3]], 4],输出[1, 2, 3, 4]
2. 思路
- 先实现一级扁平化,然后 递归调用,直到全部扁平
3. 代码
typescript
/**
* 数组深度扁平化
* @param arr
*/
export function flatten(arr: any[]): any[] {
let res: any[] = []
arr.forEach(item => {
if (Array.isArray(item)) {
res = res.concat(flatten(item))
} else {
res.push(item)
}
})
return res
}