33 lines
		
	
	
		
			674 B
		
	
	
	
		
			TypeScript
		
	
	
	
			
		
		
	
	
			33 lines
		
	
	
		
			674 B
		
	
	
	
		
			TypeScript
		
	
	
	
| const traverse = (data: any, keys: string[], single: boolean = false) => {
 | |
| 	const again = (data: any, key: string): any => {
 | |
| 		let res = []
 | |
| 
 | |
| 		if (data instanceof Object && key in data) {
 | |
| 			res.push(data[key])
 | |
| 		}
 | |
| 
 | |
| 		if (data instanceof Array) {
 | |
| 			res.push(...data.map(v => again(v, key)).flat())
 | |
| 		} else if (data instanceof Object) {
 | |
| 			res.push(
 | |
| 				...Object.keys(data)
 | |
| 					.map(k => again(data[k], key))
 | |
| 					.flat()
 | |
| 			)
 | |
| 		}
 | |
| 
 | |
| 		return res.length === 1 ? res[0] : res
 | |
| 	}
 | |
| 
 | |
| 	let value = data
 | |
| 	for (const key of keys) {
 | |
| 		value = again(value, key)
 | |
| 	}
 | |
| 
 | |
| 	return value
 | |
| }
 | |
| 
 | |
| traverse(require("./data.json")[0], ["playNavigationEndpoint", "videoId"], true)
 | |
| 
 | |
| export default {}
 |