const transform = (data: Record = {}) => Object.entries(data).reduce((buf, [key, value]) => { if (typeof value === 'string') buf.push({ label: value, value: key }) else { const { code, name, cities, districts } = value const _cities = transform(cities) const _districts = transform(districts) const children = _cities.length ? _cities : _districts.length ? _districts : undefined buf.push({ label: name, value: code, children: children }) } return buf }, [])