array 자료형 var car = [자료1, 자료2, 자료3 ]
변수 하나에 여러자료 저장가능
array에서 자료 꺼내려면 console.log(car[0]);
array 자료 추가/수정하려면 car[0] = '아반떼';
또는 car[3] = '아반떼'; console.log(car);
var car = ['소나타', 50000, 'white'];
car[3] = '아반떼';
console.log(car);
var car: {이름1: 자료1, 이름2: 자료2}
car.price = 40000;
console.log(car2['price']); //변수넣기 가능
console.log(car2.price); //변수넣기 불가
array나 object 안에 array나 object 다 들어갈 수 있다. var car2 = {name : '소나타', price: [50000, 3000, 4000]};
복잡한 자료에서 console.log 원하는 데이터 꺼내기
(1) console.log로 일단 출력해보기
(2) 출력물이 중괄호인 것은 object 자료이므로 원하는 값의 key를 입력하면 바로 출력가능하다.
(2-2) 대괄호 시작은 array 자료다. car2,price[2]
인덱싱으로 꺼내면 된다.
복잡하게 생긴 Array object의 경우 일단 출력해보고 시작 괄호가 어떤 모양인지 확인해보면 좋다.
- server-side rendering 개발방식1 완성된 html파일을 유저한테 보내는 것: 서버가 힘들다.
- client-side rendering 개발방식2 빈 html 파일+ 데이터를 유저한테 보내는 것(html의 완성은 JS가 하도록): 서버가 편하다.
데이터 바인딩(html에 데이터 꽂기 )
데이터 바인딩 쉽게 해주는 라이브러리 jQuery,React, Vue ...등
// 실습. card-title과 price에 데이터바인딩하기
document.querySelectorAll('.card-body h5')[0].innerHTML = products[0].title;
document.querySelectorAll('.card-body p')[0].innerHTML = '가격 : ' + products[0].price;
document.querySelectorAll('.card-body h5')[1].innerHTML = products[1].title;
document.querySelectorAll('.card-body p')[1].innerHTML = '가격 : ' + products[1].price;
document.querySelectorAll('.card-body h5')[2].innerHTML = products[2].title;
document.querySelectorAll('.card-body p')[2].innerHTML = '가격 : ' +products[2].price;
$('.card-body h5').eq(0).html(products[0].title);
자바스크립트에서 문자합치기는
'가격은' + products[0].price;
문자 중간에 변수 쉽게 넣기
var a = '안녕';
방법1) '문자' + a + '문자'
방법2) `문자${a}문자` //엔터쓰기 가능!! 변수를 중간에 끼워넣기 가능하다.
<select class="form-select mt-2">
<option>모자</option>
<option>셔츠</option>
</select>
// 셔츠고르면 select 하나 더 보여주기
var value = $('.form-select').eq(0).val() //유저가 <select>에서 선택한 정보 가져오기
if (value == '셔츠') { // 유저가 선택한 것 == 셔츠면
$('.form-select').eq(1).removeClass('form-hide'); //form-hide 떼어주세요.
};
그러나,
// 페이지 로드시 1회만 실행된다.
// 유저가 선택할 때마다 저 코드를 실행하기
event input? ??? input의 값이 변할 때마다 이벤트 발생
$('.form-select').eq(0).on('input',function(){ // 유저가 선택할 때마다 코드를 실행하기
var value = $('.form-select').eq(0).val();//유저가 <select>에서 선택한 정보 가져오기
if (value == '셔츠') { // 유저가 선택한 것 == 셔츠면
$('.form-select').eq(1).removeClass('form-hide'); //form-hide 떼어주세요.
};
})
위 코드 속의 var value = $('.form-select').eq(0).val();는 var value = e.currenttarget.value과 같다.
document.createElement('p');
var a = document.createElement('p');
a.innerHTML = '안녕';
document.querySelector('#test').appendChild(a);
insertAdjacentHTML(어느 위치에 추가할지, 내용)
var a = '<p>안녕</p>';
document.querySelector('#test').insertAdjacentHTML('beforeend', a);//JS
$('#test').apeend(a); //jQuery
생성법1
.createElement()
생성법2
.insertAdjacentHTML()
.append()
Q.바지선택하면 28,30 옵션이 나오게
else if (value == '바지') {
$('.form-select').eq(1).removeClass('form-hide');
$('.form-select').eq(1).html(''); // append는 그저 추가일뿐, 원래 존재하는 HTML은 삭제
var pantSize=`<option>28</option>
<option>30</option>`;
$('.form-select').eq(1).append(pantSize);
};
array에 붙일 수 있는 forEach반복문
for 반복문이 더 빠르게 동작하지만 큰 차이는 없다.
Q. pants 데이터갯수만큼<option>
생성
array안에 있던 데이터들을 순차적으로 꺼내기
pants.forEach(function(a,i){
forEach안에 파라미터 2개 생성가능하다.
// pants 데이터갯수만큼<option>생성
pants.forEach(function(a){
$('.form-select').eq(1).append(`<option>${a}</option`);
});
for(var key in obj)
})
var obj = {name: 'kim', age: 20}
for(var key in obj) {
console.log(key);
console.log(obj[key]);//value값 모두 나오는 것
}
반복문의 용도
1. 코드 반복
2. array,object 데이터 전부 꺼낼 때
서버와 데이터주고 받는 법
서버: 데이터 달라고하면 다 보내주는 프로그램
가정
1. 데이터의 url기재해야 한다.(comic.naver.com)
2. GET/POST 둘 중 하나 선택해야 한다.
GET: 데이터를 읽고싶을 때 POST: 데이터를 보낼 때
url GET 요청
form태그 POST 요청
<form action="경로" method ="post">
서버가 하는 일
데이터 보내주기,
유저 데이터 DB에 저장하기
GET/POST 요청하면 브라우저가 새로고침된다.
ajax: 새로고침 없이 GET, POST 요청하는 기능이다.
ajax로 GET 요청하는 법
//ajax로 GET 요청하는 법
$.get('https://codingapple1.github.io/hello.text')
//GET 성공시 실행되는 함수는 .done
.done(function(data){//data파라미터: 받아온 데이터가 들어있다.
console.log('data');
})
//ajax로 POST 요청하는 법
$.post('https://codingapple1.github.io/hello.text', {name: 'kim'})
.done(function(data){
console.log('data');
})
.fail(function(){//ajax실패시 특정코드 실행하고 싶으면
console.log('실패함');
})
파라미터 data: 받아온 데이터가 들어있음
ajax로 요청하는 법
ajax 실패시 특정코드 실행하고 싶으면
404는 url이 이상하다는 뜻
브라우저 기본함수 fetch 써도 ajax가능하다.
서버와 유저는 문자자료만 주고받을 수 있다.
object,array 보내고 싶으면 따옴표처럼 문자로 만들어야 한다.
받아온 JSON을 object로 바꿔주는 한줄이 더 필요하다.
axios 라이브러리 사용
//더보기 버튼 누르면 상품 3개 가져와서 출력하기
$('#more').click(function(){
$.get('https://codingapple1.github.io/js/more1.json')
.done((data)=> {
console.log(data);
// 가져온 데이터로 카드 3개 더 만들기
data.forEach((a,i)=> {
var card = `<div class="col-sm-4">
<img src="https://rdironworks.com/wp-content/uploads/2017/12/600x600.png" class="w-100">
<h5>${data[i].title}</h5>
<p>가격 : ${data[i].price}</p>
</div> `;
$('.row').append(card);
})
});
});
sort()
array.sort(function(a,b){return a-b});
var array = [7,9,3,5,2,40]
array.sort(function(a,b){
return a-b
});
array.sort(function(a,b){ return b - a});
//버튼 누르면 products 안의 데이터를 가격순 정렬
$('#price').click(function(){
products.sort(function(a, b){
return a.price - b.price
})
$('.row').html('');//카드 3개있던 div의 내용 제거
// product 수만큼 카드생성
products.forEach((data,i) => {
var card = `<div class="col-sm-4">
<img src="https://rdironworks.com/wp-content/uploads/2017/12/600x600.png" class="w-100">
<h5>${data.title}</h5>
<p>가격 : ${products[i].price}</p>
</div> `;
$('.row').append(card);
});
```
- array 자료 원하는 것만 필터하려면 .filter()
```js
var array = [7,9,3,5,2,40]
//filter()의 결과는 변수에 저장해서 써야한다.
var newArray = array.filter(function(a){
return a < 4
});
.sort()는 원본 변형 O
.filter()는 원본 변형 X
var array = [7,9,3,5,2,40]
var newArray = array.map(function(a){
return a * 4
});
return 양수 -> a 우측으로 감
return 음수 -> b 우측으로 감
a = 가, b = 다 일 경우 return 양수
a = 다, b = 나 일 경우 return 음수
a = 가, b = 나 일 경우 return 양수
// 문자 역순 정렬
var array = ['가', '다', '나'];
array.sort(function(a, b){
if (a < b) {
return 1
} else if (a = b) {
return 0 //- 같은 글자일 경우 return 0을 하면 아무 조치를 취하지않는다.
} else {
return -1
}
})
$('#sort').click(function(){
products.sort(function(a, b){
if (a.title < b.title) {
return 1
} else {
return -1
}
});
$('.row').html('');//카드 3개있던 div의 내용 제거
// product 수만큼 카드생성
products.forEach((data,i) => {
var card = `<div class="col-sm-4">
<img src="https://rdironworks.com/wp-content/uploads/2017/12/600x600.png" class="w-100">
<h5>${data.title}</h5>
<p>가격 : ${products[i].price}</p>
</div> `;
$('.row').append(card);
});
})
$('#filter').click(function(){
var newProduct = products.filter(function(a){
return a.price <= 60000
});
$('.row').html('');//카드 3개있던 div의 내용 제거
// newproduct 수만큼 카드생성
newProduct.forEach((a,i) => {
var card = `<div class="col-sm-4">
<img src="https://rdironworks.com/wp-content/uploads/2017/12/600x600.png" class="w-100">
<h5>${newProduct[i].title}</h5>
<p>가격 : ${newProduct[i].price}</p>
</div> `;
$('.row').append(card);
})
});