Moved traverse.ts

This commit is contained in:
Zechariah 2022-02-05 06:23:05 +08:00
parent 0c39ac1592
commit 75d85764c3
8 changed files with 37 additions and 7 deletions

View File

@ -4,7 +4,7 @@ import axios, { AxiosInstance } from "axios"
import PlaylistParser from "./parsers/PlaylistParser" import PlaylistParser from "./parsers/PlaylistParser"
import SearchParser from "./parsers/SearchParser" import SearchParser from "./parsers/SearchParser"
import SongParser from "./parsers/SongParser" import SongParser from "./parsers/SongParser"
import traverse from "./utils/traverse" import traverse from "./traverse"
import VideoParser from "./parsers/VideoParser" import VideoParser from "./parsers/VideoParser"
import { import {
AlbumDetailed, AlbumDetailed,

View File

@ -1,5 +1,5 @@
import SongParser from "./SongParser" import SongParser from "./SongParser"
import traverse from "../utils/traverse" import traverse from "../traverse"
import { AlbumDetailed, AlbumFull, ArtistBasic } from ".." import { AlbumDetailed, AlbumFull, ArtistBasic } from ".."
export default class AlbumParser { export default class AlbumParser {

View File

@ -1,7 +1,7 @@
import AlbumParser from "./AlbumParser" import AlbumParser from "./AlbumParser"
import Parser from "./Parser" import Parser from "./Parser"
import SongParser from "./SongParser" import SongParser from "./SongParser"
import traverse from "../utils/traverse" import traverse from "../traverse"
import { ArtistDetailed, ArtistFull } from ".." import { ArtistDetailed, ArtistFull } from ".."
export default class ArtistParser { export default class ArtistParser {

View File

@ -1,4 +1,4 @@
import traverse from "../utils/traverse" import traverse from "../traverse"
import { PlaylistFull } from ".." import { PlaylistFull } from ".."
export default class PlaylistParser { export default class PlaylistParser {

View File

@ -2,7 +2,7 @@ import AlbumParser from "./AlbumParser"
import ArtistParser from "./ArtistParser" import ArtistParser from "./ArtistParser"
import PlaylistParser from "./PlaylistParser" import PlaylistParser from "./PlaylistParser"
import SongParser from "./SongParser" import SongParser from "./SongParser"
import traverse from "../utils/traverse" import traverse from "../traverse"
import VideoParser from "./VideoParser" import VideoParser from "./VideoParser"
import { SearchResult } from ".." import { SearchResult } from ".."

View File

@ -1,5 +1,5 @@
import Parser from "./Parser" import Parser from "./Parser"
import traverse from "../utils/traverse" import traverse from "../traverse"
import { AlbumBasic, ArtistBasic, SongDetailed, SongFull, ThumbnailFull } from ".." import { AlbumBasic, ArtistBasic, SongDetailed, SongFull, ThumbnailFull } from ".."
export default class SongParser { export default class SongParser {

View File

@ -1,5 +1,5 @@
import Parser from "./Parser" import Parser from "./Parser"
import traverse from "../utils/traverse" import traverse from "../traverse"
import { VideoDetailed, VideoFull } from ".." import { VideoDetailed, VideoFull } from ".."
export default class VideoParser { export default class VideoParser {

30
src/traverse.ts Normal file
View File

@ -0,0 +1,30 @@
const traverse = (data: any, ...keys: string[]) => {
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
}
export default traverse