2차원 배열(배열을 요소로 갖는 배열)을 입력받아 각 배열을 이용해 만든 객체를 리턴해야 합니다.
[['some', 'like'], ['first', 'second'], ['mike', 'ike'], ['first', 'Fox'], ['melee', 'brawl']]을(를) 입력받은 경우, { some: 'like', first: 'second', mike: 'ike', melee: 'brawl' }을(를) 리턴해야 합니다
function convertListToObject(arr) {
let output={}
for(let i=0; i<arr.length; i++){
if(arr[i].length>0 && output[arr[i][0]]==undefined){
output[arr[i][0]] = arr[i][1]
}
}
return output
}
convertDoubleSpaceToSingle
문자열을 입력받아 해당 문자열에 등장하는 두 칸의 공백을 모두 한 칸의 공백으로 바꾼 문자열을 리턴해야 합니다.
'this here string'을(를) 입력받은 경우, 'this here string'을(를) 리턴해야 합니다
function convertDoubleSpaceToSingle(str) {
return str.replace(/ /g, " ")
}
🧩 Side Effect는 useEffect에서 다뤄야 합니다
✕ 검색 조건이 바뀔 때마다, FlightDataApi의 getFlight를 검색 조건과 함께 요청해야 합니다 (25 ms)
✕ getFlight의 결과를 받아, flightList 상태를 업데이트해야 합니다 (44 ms)
✕ 더이상, 컴포넌트 내 필터 함수filterByCondition
를 사용하지 않습니다
✕ 더이상, 하드코딩된 flightList JSON을 사용하지 않습니다 (초기값은 빈 배열로 둡니다)
✕ getFlight 요청이 다소 느리므로, 로딩 상태에 따라 LoadingIndicator 컴포넌트를 표시해야 합니다 (39 ms)
🧩 FlightDataApi에서 기존 구현 대신, REST API를 호출하도록 바꿉니다
✕ 검색 조건과 함께 StatesAirline 서버에서 항공편 정보를 요청(fetch)합니다 (2 ms)
const [isLoading, setIsLoading] = useState(true)
{isLoading? <LoadingIndicator/>:<FlightList list={flightList} />}
useEffect(() =>{
setIsLoading(true)
getFlight(condition)
.then((filtered) =>{
setFlightList(filtered)
setIsLoading(false)
})
}, [condition])
export function getFlight(filterBy = {}) {
let string=''
if(filterBy.departure){
string += `departure=${filterBy.departure}&`
}
if(filterBy.destination){
string += `destination=${filterBy.destination}`
}
let url=`http://ec2-13-124-90-231.ap-northeast-2.compute.amazonaws.com:81/${string}`
return fetch(url)
.then((res)=>res.json)
}