: 데이터를 송수신 하는 비동기 처리를 하는 최신 API, Promise 객체를 반환
: .json() method는 Response 스트림을 가져와 스트림이 완료될때까지 읽고, 이 메서드는 body 텍스트를 JSON으로 바꾸는 결과로 해결되는 promise를 반환
: 기본 코드
fetch('http://example.com/movies.json')
.then(response => response.json())
.then(data => console.log(data));
https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API/Using_Fetch
: array나 object의 element를 함수의 인자로 사용하고자 할때 기존 apply()를 대체
: arrat나 object의 요소를 추가, 삭제, 병합 등을 쉽게 구현
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Operators/Spread_syntax
: 문자열에 나타는 특정 문자 조합과 대응시키기 위해 사용되는 패턴.
: 자바스크립트에서, 정규 표현식 또한 객체임
: 정규 표현식 관련 method(match, replace 등) 사용하려면, 먼저 새로운 RegExp 객체를 생성한다음 위 관련 method의 인자로 넣어야 함
https://developer.mozilla.org/ko/docs/Web/JavaScript/Guide/%EC%A0%95%EA%B7%9C%EC%8B%9D
<script>
const endpoint =
'https://gist.githubusercontent.com/Miserlou/c5cd8364bf9b2420bb29/raw/2bf258763cdddd704f8ffd3ea9a3e81d25e2c6f6/cities.json';
const cities = [];
fetch(endpoint)
.then((blob) => blob.json())
.then((data) => {
cities.push(...data);
console.log(cities);
});
// cities에서 검색어와 매치되는 데이터만 선별
function findMatches(wordToMatch, cities) {
return cities.filter((place) => {
const regex = new RegExp(wordToMatch, 'gi');
return place.city.match(regex) || place.state.match(regex);
});
}
function numberWithCommas(x) {
//세자리 숫자마다 콤마 찍기 위함
return x.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',');
}
function displayMatches() {
const matchArray = findMatches(this.value, cities);
const html = matchArray
.map((place) => {
const regex = new RegExp(this.value, 'gi');
const cityName = place.city.replace(
regex,
`<span class="hl">${this.value}</span>`
);
const stateName = place.state.replace(
regex,
`<span class="hl">${this.value}</span>`
);
return `
<li>
<span class="name">${cityName}, ${stateName}</span>
<span class="population">${numberWithCommas(place.population)}</span>
</li>
`;
})
.join('');
suggestions.innerHTML = html;
}
const searchInput = document.querySelector('.search');
const suggestions = document.querySelector('.suggestions');
searchInput.addEventListener('change', displayMatches);
searchInput.addEventListener('keyup', displayMatches);
</script>