Use generator for getting paths

js-version
Anton Medvedev 6 years ago
parent 9a4d897c8d
commit fe57a92cfe

19
fx.js

@ -222,7 +222,14 @@ module.exports = function start(filename, source) {
box.key('e', function () { box.key('e', function () {
hideStatusBar() hideStatusBar()
expanded.clear() expanded.clear()
walk(json, path => expanded.size < 1000 && expanded.add(path)) for (let path of paths(json)) {
if (expanded.size < 1000) {
console.error(path)
expanded.add(path)
} else {
break
}
}
render() render()
}) })
@ -547,24 +554,24 @@ module.exports = function start(filename, source) {
render() render()
} }
function walk(v, cb, path = '') { function* paths(v, path = '') {
if (!v) { if (!v) {
return return
} }
if (Array.isArray(v)) { if (Array.isArray(v)) {
cb(path) yield path
let i = 0 let i = 0
for (let item of v) { for (let item of v) {
walk(item, cb, path + '[' + (i++) + ']') yield* paths(item, path + '[' + (i++) + ']')
} }
} }
if (typeof v === 'object' && v.constructor === Object) { if (typeof v === 'object' && v.constructor === Object) {
cb(path) yield path
let i = 0 let i = 0
for (let [key, value] of Object.entries(v)) { for (let [key, value] of Object.entries(v)) {
walk(value, cb, path + '.' + key) yield* paths(value, path + '.' + key)
} }
} }
} }

Loading…
Cancel
Save