JS 강의 필기 + 추가
array
자료구조의 일종
array declaration
const arr1 = new Array();
const arr2 = [1, 2];
index position
python과 달리 -1 index를 줄 수 없다.
const fruits = ['a', 'b'];
console.log(fruits); // (2) ["a", "b"]
console.log(fruits.length); // 2
console.log(fruits[0]); // index에 해당하는 값 나옴
console.log(fruits[2]); // 없는 index 결과: undefined
console.log(fruits[fruits.length - 1]); // 마지막 값
looping over an array
fruits의 data 수만큼 body를 실행하는 세가지 방법
1. for
for (let i = 0; i < fruits.length; i++) {
console.log(fruits[i]);
}
2. for ... of
for (let fruit of fruits) {
console.log(fruit);
}
3. forEach
forEach에 들어가는 함수의 params로 들어가는 index, array는 옵션으로,
fruits.forEach(function (fruit, index, array) {
console.log(fruit, index, array);
});
// 위를 arrow function으로 쓸 수 있다
fruits.forEach((fruit) => console.log(fruit)); // fruit만 출력
addition, deletion, copy
push: add an item to the end
pop: remove an item from the end
unshift: add an item to the beginning
shift: remove an item from the beginning
unshift, shift는 재배치할 때 죄 움직이기 때문에 array의 길이가 길수록 시간이 오래걸림
splice: remove an item by index position
fruits.push('c', 'd', 'e');
console.log(fruits); //(5) ["a", "b", "c", "d", "e"]
fruits.splice(1, 1); // index 1부터 1개 삭제
console.log(fruits); // (4) ["a", "c", "d", "e"]
fruits.splice(1, 1, 'f'); // 삭제하면서 그 자리에 삽입
console.log(fruits); // (4) ["a", "f", "d", "e"]
combine two arrays
const fruits2 = ['x', 'y'];
const newFruits = fruits.concat(fruits2);
console.log(newFruits); // (6) ["a", "f", "d", "e", "x", "y"]
searching
indexOf: index 출력. 없으면 -1 출력
includes: 존재 여부에 따라 boolean값 출력
console.log(fruits.indexOf('a')); // 해당 index 출력
console.log(fruits.indexOf('z')); // 없는 값은 -1 출력
console.log(fruits.includes('a')); // true
console.log(fruits.includes('z')); // false
중복된 값이 존재하는 array에서
indexOf는 가장 앞에 있는 요소의 index를 출력
lastIndexOf는 가장 뒤에 있는 요소의 index를 출력
fruits.push('a');
console.log(fruits); // (5) ["a", "f", "d", "e", "a"]
console.log(fruits.indexOf('a')); // 0
console.log(fruits.lastIndexOf('a')); // 4
toString, join
join은 연결자를 지정할 수 있음
const fruits = ['apple', 'banana', 'orange'];
console.log(fruits.toString()); // apple,banana,orange
const result = fruits.join('&');
console.log( `Q1 result: ${result}`); // apple&banana&orange
split
split(구분자, limit)
const fruits = '🍎, 🥝, 🍌, 🍒';
const result = fruits.split(', ');
console.log(result); // (4) ["🍎", "🥝", "🍌", "🍒"]
console.log(fruits.split(', ', 2)); // 두번째 param은 limit. (2) ["🍎", "🥝"]
console.log(`Q2 result: ${result}`); // Q2 result: 🍎,🥝,🍌,🍒
reverse
원본 배열 자체를 변화시킴
const array = [1, 2, 3, 4, 5];
array.reverse();
console.log(array); // (5) [5, 4, 3, 2, 1]
slice, splice
splice는 원본 배열 자체를 변화시킴
const array = [1, 2, 3, 4, 5];
const newArray = array.slice(2, 5); // index 2 이상 5 미만
array.splice(0, 2); // 원본 배열 자체를 변화시킴.
console.log(array); // (3) [3, 4, 5]
예제
class Student {
constructor(name, age, enrolled, score) {
this.name = name;
this.age = age;
this.enrolled = enrolled;
this.score = score;
}
}
const students = [
new Student('A', 29, true, 45),
new Student('B', 28, false, 80),
new Student('C', 30, true, 90),
new Student('D', 40, false, 66),
new Student('E', 18, true, 88),
];
find
첫번째로 true가 나온 배열의 요소를 return
const result = students.find(function(student, index){
return student.score === 90; // boolean으로 return 하도록
});
console.log(result); // Student {name: "A", age: 29, enrolled: true, score: 45} 0
console.log(`${result}`); // A
// arrow function으로 정리
const result = students.find((student) => student.score === 90);
filter
true가 나온 배열의 요소를 array로 return
const result = students.filter((student) => student.enrolled);
console.log(result); // [Student, Student, Student] toggle 눌러서 각 object 정보 볼 수 있음.
map
배열의 각 요소들을 function을 거친 값으로 mapping
const result = students
.map((student) => student.score) // (5) [45, 80, 90, 66, 88]
.join(); // 45,80,90,66,88
some
callback함수가 true가 되는 게 있는지 확인
const result = students.some((student) => student.score); // true
every
모든 배열이 조건 만족하는지 확인
const result2 = !students.every((student) => student >= 50); // true
sort
배열내의 이전값을 a, 현재값을 b로 지정하고 negative value를 return하도록 정렬규칙 지정
It is expected to return a negative value if first argument is less than second argument.
내림차순 정렬: sort((a, b) => b - a)
오름차순 정렬: sort((a, b) => a - b)
const result = students
.map((student) => student.score)
.sort((a, b) => a - b)
.join(); // 45,66,80,88,90
reduce
배열의 가장 뒤부터 시작하는 reduceRight도 있음
calls the callbackfn function one time for each element in the array.
const result = students.reduce((prev, curr) => prev + curr.score, 0);
console.log(result / students.length); // 평균
어떻게 돌아가는지 풀어서 보기
const reduceTest = students.reduce((prev, curr) => {
console.log('------')
console.log(prev);
console.log(curr);
return curr;
// 여기서 return한 게 다음에 호출되면 prev가 되는 것. 이게 없으면 두번째 호출부터는 prev가 undefined
});
const reduceTestWithInitialValue = students.reduce((prev, curr) => {
console.log('------')
console.log(prev);
console.log(curr);
return prev + curr.score;
}, 0); // initial value 부터 시작
console.log(reduceTestWithInitialValue);
'JS' 카테고리의 다른 글
JS - callback, promise (0) | 2020.12.26 |
---|---|
JS - JSON (0) | 2020.12.25 |
JS - object (0) | 2020.12.23 |
JS - class (0) | 2020.12.22 |
JS - function (0) | 2020.12.21 |