원장님 후발대 강의듣고 정리해보았다
push
와 pop
을 사용해 요소를 넣었다 뺄 수 있다
push
는 배열의 맨 뒤에다가 값을 넣을 수 있는 것이고
pop
을 사용해 배열의 맨 뒤부터 값을 뺄 수 있다
let testArr = [1,2,5,76,83];
testArr.push(3);
console.log(testArr); // [1,2,5,76,83,3]
testArr.pop();
console.log(testArr); // [1,2,5,76,83]
shift
을 사용해 배열의 맨 앞부터 값을 뺄 수 있고
unshift
를 이용해서 배열의 맨 앞부터 값을 넣을 수 있다
let people = ["h", "ㅁ", "f"];
console.log(people.shift()); // h
console.log(people); // ["ㅁ", "f"]
people.unshift("h");
console.log(people); // ["h", "ㅁ", "f"] h를 배열의 맨 앞에 넣은 것을 볼 수 있음
let frutis = ['사과', '배', '메론'];
let animals = ['사자', '호랑이', '곰'];
let newArra4 = fruits.concat(animals);
console.log(newArr4); // '사과', '배', '메론', '사자', '호랑이', '곰'
let number = [1,2,3,4,5,6,7,8,9,10];
let newArr5 = number.slice(0,2);
let newArr10 = number.slice(-1,0);
let newArr11 = number.slice(-2, 5);
console.log(newArr5); // [1,2] (0번째부터 2번째 이전까지 자름(인덱스 0부터 1까지))
console.log(newArr10); // [10]
console.log(newArr11); // [] (뒤에서 3번째부터 앞에서
let number = [1,2,3,4,5,6,7,8,9,10];
let numbers = [1,2,3,4,5,6,7,8,9,10];
let numberss = [1,2,3,4,5,6,7,8,9,10];
let numbert = [1,2,3,4,5,6,7,8,9,10];
let numst = [1,2,3,4,5,6,7,8,9,10];
let newArr6 = number.splice(0,2);
let newArr10 = numbers.slice(-1);
let arr8 = numberss.splice(-6, 3);
let aa77 = numst.splice(3,0,-55,99);
console.log(newArr6); // [1,2]
console.log(newArr10); // [10]
console.log(arr8); //[5,6,7]
console.log(aa77); // [] -> 이 이후에 배열명(여기선 numst)을 치면 [1, 2, 3, -55, 99, 4, 5, 6, 7, 8, 9, 10] 인덱스 3번부터 값을 하나도 빼지 않고 55와 99를 배열 안에 넣은 것을 확인할 수 있음
let fruits = ['사과', '포도', '파인애플', '망고'];
이 배열을 사용해서 length와 join, reverse, sort를 실습해보겠다
let amount = fruits.length; // 배열의 길이를 알 수 있음
let newStr = fruits.join('/'); // 말그대로 join
let str0 = fruits.join(''); // 말그대로 join
let newArrs = fruits.reverse(); // 배열의 값을 reverse하는 것
let newArr2 = animals.sort(); // 정렬하는 메소드
console.log(amount); // 4
console.log(newStr); // 사과/포도/파인애플/망고
console.log(str0) // 사과포도파인애플망고
console.log(newArrs); // ['망고', '파인애플', '포도', '사과']
console.log(newArr2); // ['망고', '사과', '파인애플', '포도']
sort는 원본 배열이 정렬되고 리턴하는 배열도 원본 배열을 가리킨다
만약 sort()안에 파라미터가 없으면 배열 속 요소들은 자동으로 문자열 취급하고 유니코드에 따라 오름차순으로 정렬된다
const arr1 =[3,5,1,10,2,22,7,6]
arr12.sort(); // [1, 10, 2, 22, 3, 5, 6, 7]
유니코드 순서에 따라 정렬이 된 걸 볼 수 있다
하지만 우리가 원하는 것은 [1,2,3,5,6,7,10,22] 이기에 함수를 인자로 넣어 이용해야함
const arr1 =[3,5,1,10,2,22]
arr1.sort(function(a, b) => {
return a - b;
});
혹은 화살표 함수를 이용해 이렇게 쓸 수도 있다
const arr1 =[3,5,1,10,2,22]
arr1.sort((a, b) => {
return a - b;
});
console.log(arr1)// [1, 2, 3, 5, 10, 22]
a-b를 리턴하는데 왜 정렬이 되는지 모르겠다면 console.log(a,b)를 찍어보면 된다
const arr1 =[3,5,1,10,2,22]
arr1.sort((a, b) => {
console.log(a,b)
return a - b;
});
중간에 콘솔 찍은 값을 보면 다음과 같이 나온다
5 3 -> [3,5,1,10,2,22]
1 5 -> [3,1,5,10,2,22]
1 3 -> [1,3,5,10,2,22]
10 3 -> [1,3,10,5,2,22]
10 5 -> [1,3,5,10,2,22]
2 5 -> [1,3,2,5,10,22]
2 3 -> [1,2,3,5,10,22]
2 1 -> [1,2,3,5,10,22]
22 3 -> [1,2,3,22,5,10]
22 10 -> [1,2,3,5,10,22]
a-b를 한 값이 양수인지 음수인지 0인지 알면 되는데
양수이면 a는 b뒤에 오고 음수이면 a는 b앞에 온다 0이면 정렬을 유지한다!!
reduce
인수로 함수를 받음
(누적 계산값, 현재 값) => {return 계산값 };
배열 메소드를 검색해보니 나와서 이것도 정리한다
일단 reduce를 통해 배열의 모든 수를 더해보자
let arr = [1,2,3,4];
const result = arr.reduce(function(pre, cur) {
return pre + cur;
}, 초기값(옵션이라서 해도 안 해도 그만))
함수 안에 있는 인자에 pre는 지금까지 누적된 값을 말하고 cur은 현재 값을 말한다
그리고 초기값은 옵션이라 해도 안 해도 무방하다 그래도 일단 초기값을 0으로 해놓고
배열의 모든 수를 더해보겠다
일단 초기값이 0이므로 누산된 값은 0이고 배열에서 하나씩 현재값을 가져와 더해줄것이다
그러면 누산값 0에 현재값 1을 더하면 누산값은 1이 된다
그러면 pre에 있는 누적값은 1, 현재 값은 2 더하면 누적값3
그 다음 누적값3에 현재값3을 더하면 누적값이 6이 된다
그렇게 계속 더하다보면 누적값은 10이 되어서 배열의 수를 모든 더한 값은 10이 출력된다
이를 객체에서도 쓸 수 있다
let users = {
{ name: 'hoho', age: 18 },
{ name: 'jane', age: 3 },
{ name: 'josh', age: 60 },
{ name: 'danaka', age: 52 },
{ name: 'hyun', age: 27 },
}
let result = users.reduce((pre, cur) => {
if(cur.age > 19) {
pre.push(cur.name);
}
return pre;
}, []);
console.log(result) // ['josh', 'danaka', 'hyun']
users라는 객체에서 나이가 19살보다 많은 사람들의 나이를 배열로 만들었다
초기값을 빈 배열로 해놓고 age가 19살보다 많은 사람의 이름을 누산값(여기서는 빈 배열)에 push해주어 하나의 배열로 만들어 주었다
예시는 코딩앙마에서 나온 예시를 적어보았는데
이렇게도 사용할 수 있구나하는 생각이 들었다
반복문을 많이 쓰는 이유는 자바스크립트가 반복문에 최적화되어있기 때문에
배열이 가지고 있는 속성인 length를 이용해 여러가지 작업을 할 수 있다
let testArrs = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
for (let i = 0; i <= testArrs.length; i++) {
if (i % 2 === 0)
console.log(i);
}
// 0,2,4,6,8
for문으로 돌면서 if문 안의 조건처럼 i를 2로 나누었을 때 0이 나오는 값(짝수)를 뽑아내는 코드를 작성하였다
let testArrs = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
for (key in testArrs) {
console.log(key); // testArrs 배열의 인덱스(0 ~ 9)가 나옴
console.log(testArrs[key]); // 1, 2, 3, 4, 5, 6, 7, 8, 9, 10
}
console.log(key)를 찍었을 땐 인덱스가 나왔기 때문에 배열 안의 값을 가져오려면
testArrs[key] 이런 식으로 작성해야 값을 가져올 수 있음(testArrs[0]은 1, testArrs[1]은 2 이런 식임)
let testArrs = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
for (value of testArrs) {
console.log(value);
}
//1, 2, 3, 4, 5, 6, 7, 8, 9, 10
for문을 이용해 li 태그 만들어서 ul 태그 밑에 넣는 작업도 했다
먼저 li 태그 만들어서 ul 태그 밑에 넣는 작업을 하려면 다음과 같이 생각해 볼 수 있다
1. li 태그 3개 만들기
2. li태그를 ul태그에 넣기
let color = ["red", "blue", "yellow", "black", "purple", "pink"];
let listTag;
for (let i = 0; i < color.length; i++) {
listTag = document.createElement("li");
listTag.textContent = color[i];
document.querySelector("ul").append(listTag);
}
listTag라는 변수를 선언해놓고 for문을 돌려서 배열 안의 값들을 넣을 것이다
먼저 변수 listTag에 html안에 <li>
를 만드는 코드를 할당하고 만들어질 <li>
태그에 for문으로 돌면서 넣을 요소들(color[i])을 텍스트로로 반환하게끔 한다
다큐먼트에서 ul태그를 찾아서 append를 사용해 listTag를 붙이게 한다
let color = ["red", "blue", "yellow", "black", "purple", "pink"];
let listTag;
for (item of color) {
listTag = document.createElement("li");
listTag.textContent = item;
document.querySelector("ul").appendChild(listTag);
}
<li>
태그 형식으로 배열 속에 있는 값들을 원하는 대로 ul태그 밑에 출력하였다
함수는 두 가지 방식으로 만들 수 있
지만 변수 안에 넣는 방식이 좀더 시맨틱하다
예시)
let testFunc = function () { }
오늘 퀴즈에도 나왔던 문제를 함께 풀어보며 다시 익힐 수 있었다
문제)
배열을 입력으로 받아서 배열을 출력하세요
함수 내부에 2의 배수가 있으면 출력을 안 하게 해주세요(2의 배수가 아니면 출력할거라는 말)
출력한다는 말은 새로운 배열에 넣어서 리턴해주고 리턴한 값을 콘솔 찍겠다는 말이다
이걸 하기 위해서는 다음과 같이 생각해볼 수 있다
위에서 생각한 대로 차근차근 작성을 해보면 다음과 같다
const num = [45, 121, 486, 78];
function test(num) {
let result = [];
for (okok of num) {
if (okok % 2 !== 0) {
result.push(okok);
}
}
return result;
}
console.log(test(num));