Преобразовать объект в объекте в массив и вывести его в рендер
const InputSelector:React.FC = () => {
const [selectItem, setSelectItem] = useState('')
const dispatch = useAppDispatch()
const {currency} = useAppSelector(state => state.currencySlice)
console.log(currency)
// base: "RUB"
// date : "2023-02-23"
// disclaimer : "https://www.cbr-xml-daily.ru/#terms"
// rates : {AUD: 0.019572, AZN: 0.022755, GBP: 0.0110267, AMD: 5.226708, BYN: 0.03745346, …}
// timestamp : 1677099600 // Это изначальный объект
const key = Object.keys(currency)
const valueC = Object.values(currency)
const dataEnt = Object.entries(valueC)
const dataEntRates = valueC[4]
console.log( dataEntRates)
// AED: 0.049164
// AMD: 5.226708
// AUD: 0.019572
// AZN: 0.022755 // получаю такие данные, это объект их как раз и нужно отрендерить ниже именно ключ тобишь AUD, AMD, AED списком опций в from, и to
// BGN: 0.0245499985
// BRL: 0.06961558
// BYN: 0.03745346
return (
<div className='Selected'>
<h1 className='Selector-text'>Вы переводите из</h1>
<select className='Selector-up' onChange={event => setSelectItem(event.target.value)}>
{dataEnt?.map((res:any, id:number) => <option key={id} value={res}>from</option>)}
</select>
<p className='Selector-text'>в</p>
<select
className='Selector-up'
onChange={event => setSelectItem(event.target.value)}
>{dataEnt?.map((res:any, id:number) => <option key={id}>to</option>)}</select>
</div>
)
}
Ответы (1 шт):
Автор решения: SwaD
→ Ссылка
Если ваш исходный объект выглядит так, как указано ниже, то можно воспользоваться Object.entries для превращения объекта в массив
const currency = {
base: "RUB",
date : "2023-02-23",
disclaimer : "https://www.cbr-xml-daily.ru/#terms",
rates : {AUD: 0.019572, AZN: 0.022755, GBP: 0.0110267, AMD: 5.226708, BYN: 0.03745346},
timestamp : 1677099600, // Это изначальный объект
}
Object.entries(currency.rates).forEach(item => {
console.log(item[0], item[1])
})
Соответственно, ваш компонент будет выглядеть так:
const {currency} = useAppSelector(state => state.currencySlice) // получаем данные
// в методе рендер
<select
className='Selector-up'
onChange={event => setSelectItem(event.target.value)}
>
{Object.entries(currency.rates)?.map((res:any) => <option key={res[0]} value={res[1]}>from {res[0]}</option>)}
</select>
<p className='Selector-text'>в</p>
<select
className='Selector-up'
onChange={event => setSelectItem(event.target.value)}
>
{Object.entries(currency.rates)?.map((res:any) => <option key={res[0]} value={res[1}>to {res[0]}</option>)}
</select>